VS2015 調試stl vectory 不顯示數據

VS 2015不顯示相關的調試數據,只有原始的內存數據,這是由於在VS以後的新版本加入一個新的功能,能夠自定義設置相關的數據顯示格式,而在VS2015中相關的顯示格式沒有像VS2013等前期版本的那樣作。ide

1、現象

最近使用vs2015調試C++程序,結果發現了一個很奇怪的問題:調試時沒法查看stl裏面string,vector,list等容器類的值了,以下圖所示,調試時把鼠標移動到「str」這個變量上面,結果發現顯示「str|{…}」,沒法顯示str的值了。
在這裏插入圖片描述
正常狀況下調試時應該顯示「hello world」纔對,以下圖所示:
在這裏插入圖片描述工具

2、問題產生的可能緣由

       問題發生的緣由極可能跟XXX.natvis文件有關,在vs2012以上的版本,提供了.natvis可視化工具設計來爲不一樣類型的
C/C++ 類型聲明自定義可視化。可視化的類型改變了對象在本地表達式計算器的顯示方式,包括在監視和變量窗口以及
調試數據提示。spa

3、找到問題產生的緣由:

       首先,在「工具」->「選項」->「調試」->「常規」中把「使用託管兼容模式」和「使用本機兼容性模式」前面的勾去掉,不然可能沒法使用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&lt;*&gt;">
  <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文件

* 特定於用戶的 natvis 目錄xml

  (%USERPROFILE%\My Documents\Visual Studio 2015\Visualizers)

默認是最後的Visualizers目錄是不存在,須要新建一個目錄哈對象

  • 系統級 Natvis 目錄
(%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

相關文章
相關標籤/搜索