VS2019调试查看变量_你很可能需要知道这个调试小技巧
緣起
最近在調試的時候,需要觀察第三方容器中每一個元素的值。默認情況下,vs 并不知道如何顯示第三方容器的內容,只能手動觀察容器中的每一個值,超級不方便。我找到一個非常給力的好辦法,你還知道其它好辦法嗎?
為了更直觀的感受這種便利,我特意截圖對比了三種常用的觀察變量的方法。
直接觀察
1、通過 vs 的懸浮提示觀察。
小貼士:把鼠標移動到對應的變量即可。可以發現,現在 vs 并不知道如何解析 pts 的內容,只能 “傻傻” 的顯示出 bvector 中的三個成員。
2、通過 watch 窗口觀察。
小貼士:可以使用快捷鍵 ctrl + alt + w, 1 來打開第一個 watch 窗口。據我觀察,最多支持 4 個 watch 窗口。可以發現,我們可以在代碼中使用的 at(index) 和 [index] 已經失效了,只能使用蹩腳的 (pts._C_alloc)._C_begin + index 來觀察對應的變量(反人類,有木有)。
你也許好奇,我是怎么知道可以使用 (pts._C_alloc)._C_begin + index 來觀察的,簡單!在懸浮提示中,右鍵,復制表達式(X),如下圖:
3、通過 quick watch 窗口觀察。
小貼士:可以選中要觀察的變量,然后按快捷鍵 shift + f9 打開快速監視窗口。同樣,沒什么用。
難道只能這么低效嗎?vs2012 之前是的,但是事情從 vs2012 發生了變化。從 vs2012 開始,vs 支持通過 natvis 來觀察變量,超級方便。
話不多說,開啟 natvis 后再使用上面的三種方法觀察同樣的變量。
開啟 natvis 后觀察
1、通過 vs 的懸浮提示觀察。
2、通過 watch 窗口觀察。
3、通過 quick watch 窗口觀察。
有木有很方便?要是很多元素要觀察(比如,有 128 或者 1024 個),是不是可以節省很多時間?
如何開啟
可以自己編寫 .natvis文件并放到指定目錄下,重啟 vs 后即可加載。請原諒我比較懶,直接從官方文檔上摘錄了一段,更多內容可以參考文末給出的參考鏈接。
搜索位置及順序轉載如下[1]
If multiple valid entries are encountered for the same type, the first one in the following list will be used:- PDB
- Project/solution
- User directory: %USERPROFILE%My DocumentsVisual Studio 2015Visualizers
- Install directory: %VSINSTALLDIR%Common7PackagesDebuggerVisualizers
我放到了 %USERPROFILE%My DocumentsVisual Studio 2013Visualizers 下。
提示
在高版本的 vs 中(vs2017/vs2019 ,vs2015 沒親自確認),可以自動重新加載修改的 .natvis 文件內容,但是 vs2012/vs2013 并不支持動態加載。
排錯
如果 natvis 加載有問題,可以通過設置注冊表開啟診斷信息[2]
[HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio11.0_ConfigDebugger] "EnableNatvisDiagnostics"=dword:00000001windbg 中的 natvis
windbg 中也可以使用 dx 命令來進行一些高級查看(超級超級厲害的 dx 命令),具體參考 defrag tools 上的視頻。
- Defrag Tools #138 - Debugging - 'dx' Command Part 1[3]
- Defrag Tools #139 - Debugging - 'dx' Command Part 2[4]
最后,附上文中用到的 .natvis 文件,大家可以做個參考。
示例
<?xml version="1.0" encoding="utf-8"?> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"><!--from bvector --><Type Name="Bentley::Bstdcxx::bvector<*>"> <DisplayString>{{size = {_C_alloc._C_end - _C_alloc._C_begin}}}</DisplayString> <Expand> <Item Name="[size]">_C_alloc._C_end - _C_alloc._C_begin</Item> <Item Name="[capacity]">(_C_alloc._C_bufend - _C_alloc._C_begin)</Item> <ArrayItems> <Size>_C_alloc._C_end - _C_alloc._C_begin</Size> <ValuePointer>_C_alloc._C_begin</ValuePointer> </ArrayItems> </Expand> </Type> </AutoVisualizer>總結
- 調試時,鼠標懸停到對應的變量上可以通過懸浮提示觀察變量的值。
- 使用 ctr + alt + w,1 可以快速打開 watch 1 窗口。
- 鼠標懸浮到變量上,按 shift + f9 可以打開快速觀察窗口。
- .natvis 文件可以讓我們個性化的觀察變量,可以極大的提高我們的調試效率。
- 在高版本的 vs 中,我們甚至可以動態編輯 .natvis 文件的內容,更加靈活的觀察變量。
- windbg 中的 dx 命令,可謂神器,但是本文并未介紹,感興趣的小伙伴兒可以直接看視頻!
參考資料
- https://blogs.msdn.microsoft.com/vcblog/2015/09/28/debug-visualizers-in-visual-c-2015/
- https://blogs.msdn.microsoft.com/vcblog/2014/06/12/project-support-for-natvis/
- https://docs.microsoft.com/en-us/cpp/build/reference/natvis-add-natvis-to-pdb?view=vs-2017
- https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2017
- https://social.msdn.microsoft.com/Forums/vstudio/en-US/6e4a67f8-1239-4b3c-af45-f5ea5ea41e80/enabling-natvis-diagnostic-mode
- https://stackoverflow.com/questions/17811628/user-defined-natvis-files-in-visual-studio-2012
參考資料
[1] 搜索位置及順序轉載如下: https://blogs.msdn.microsoft.com/vcblog/2015/09/28/debug-visualizers-in-visual-c-2015/
[2] 開啟診斷信息: https://social.msdn.microsoft.com/Forums/vstudio/en-US/6e4a67f8-1239-4b3c-af45-f5ea5ea41e80/enabling-natvis-diagnostic-mode
[3] Defrag Tools #138 - Debugging - 'dx' Command Part 1: https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-138-Debugging-dx-Command-Part-1
[4] Defrag Tools #139 - Debugging - 'dx' Command Part 2: https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-139-Debugging-dx-Command-Part-2
總結
以上是生活随笔為你收集整理的VS2019调试查看变量_你很可能需要知道这个调试小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为任职资格_华为采购总部专业任职资格标
- 下一篇: android界面元素识别,Androi