VS 2015不顯示相關的調試數據,只有原始的內存數據,這是由於在VS以後的新版本加入一個新的功能,能夠自定義設置相關的數據顯示格式,而在VS2015中相關的顯示格式沒有像VS2013等前期版本的那樣作。ide
最近使用vs2015調試C++程序,結果發現了一個很奇怪的問題:調試時沒法查看stl裏面string,vector,list等容器類的值了,以下圖所示,調試時把鼠標移動到「str」這個變量上面,結果發現顯示「str|{…}」,沒法顯示str的值了。
正常狀況下調試時應該顯示「hello world」纔對,以下圖所示:工具
問題發生的緣由極可能跟XXX.natvis文件有關,在vs2012以上的版本,提供了.natvis可視化工具設計來爲不一樣類型的
C/C++ 類型聲明自定義可視化。可視化的類型改變了對象在本地表達式計算器的顯示方式,包括在監視和變量窗口以及
調試數據提示。spa
首先,在「工具」->「選項」->「調試」->「常規」中把「使用託管兼容模式」和「使用本機兼容性模式」前面的勾去掉,不然可能沒法使用natvis文件,以下圖所示:
若是沒有加載成功,或者沒有預計的內容,能夠按第二步設置來肯定問題產生的緣由。
第二步,在「工具」->「選項」->「調試」->「輸出窗口」->「Natvis診斷消息(僅限C++)」,這裏選擇「詳細」,(默認是「關閉」)。以下圖所示:選擇了「詳細」咱們才能在調試時發現是不是由於natvis文件不正常致使沒法看到變量的值。
點擊「調試」->「開始調試」,而後「調試」->「所有終止」,而後咱們能夠在「輸出窗口」這裏找到問題產生的緣由debug
下面是我本身用的natvis文件,主要用於顯示vector設計
<?xml version="1.0" encoding="utf-8"?> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <Type Name="std::vector<*>"> <DisplayString>{{ size={_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst} }}</DisplayString> <Expand> <Item Name="[capacity]" ExcludeView="simple">_Mypair._Myval2._Myend - _Mypair._Myval2._Myfirst</Item> <Item Name="[allocator]" ExcludeView="simple">_Mypair</Item> <ArrayItems> <Size>_Mypair._Myval2._Mylast - _Mypair._Myval2._Myfirst</Size> <ValuePointer>_Mypair._Myval2._Myfirst</ValuePointer> </ArrayItems> </Expand> </Type> </AutoVisualizer>
把上面的代碼複製後,保存爲natvis文件,而後在vs的資源選項卡加,加載現有資源,把這個natvis文件加載上便可。調試
* 特定於用戶的 natvis 目錄xml
(%USERPROFILE%\My Documents\Visual Studio 2015\Visualizers)
默認是最後的Visualizers目錄是不存在,須要新建一個目錄哈對象
(%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers)。
這就是複製隨 Visual Studio 一塊兒安裝的 .natvis 文件的位置。 若是具備管理員權限,則也能夠向此目錄添加其餘文件
微軟的natvis的說明:
https://docs.microsoft.com/zh-cn/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2015blog