前言
之前在《5 个非常实用的 vs 调试技巧》和《继续分享 5 个实用的 vs 调试技巧》中分享了 10
个我认为非常值得了解的 vs
调试技巧,本周继续分享 5
个很实用的调试技巧。
1. 显示下一条语句
在调试时,遇到断点中断后,为了更加清楚的了解程序逻辑,经常需要翻看调用栈,查看相关代码。看完后,想快速返回到中断的地方,之前基本上是通过以下两种方法返回。
ctrl + alt + c
调出调用栈,然后双击最上方的栈帧来返回。按一下
F11
让程序运行一小步(有时候就进到函数里了,很不好)。
这两种方法都比较麻烦。其实, vs
中有一个非常实用的功能,可以快速的回到中断处。这个功能就是 显示下一条语句
。
中断后, 右键
,显示下一条语句
即可显示下一条语句。在 vs2013
中对应的快捷键是 alt + *
。
小贴士:
alt + *
是小键盘上的*
。
2. 设置 symbol
不知道各位在调试的时候,有没有遇到过 vs
特别慢的情况,跟卡死了一样。很有可能是在加载符号。有两个方法可以加速:
断网。断网后可以使加载符号的操作失败的更快。但是会导致有些模块的符号加载不上。
设置符号加载策略。可以只为特定模块加载符号。通过
调试 -> 选项和设置
,然后选择调试 -> 符号
即可设置。
说明:
如果愿意,可以随时手动为特定模块单独加载符号。
可以通过 调试 -> 窗口(W) -> 模块(O)
或者快捷键 Ctl + Alt + U
打开模块列表界面。
然后在选中的模块上 右键 -> 加载符号
即可。
3. 调试子进程
windbg
有一个非常给力的功能就是调试子进程
。当需要调试子进程的时候,不用手动附加到子进程了,而且不必担心错过子进程中的初始化代码了。据我所知,vs
本身并不支持这项功能,需要使用官方提供的插件 —— Microsoft Child Process Debugging Power Tool[1]。该插件支持 vs2013~2019
。
具体使用介绍 请参考 Introducing the Child Process Debugging Power Tool[2]
4. 伪变量
了解一些 vs
中的一些伪变量非常有必要。比如,当前进程的环境变量,命令行等信息。
Pseudovariables | Function |
---|---|
$err | 获取 LastError 的值,等同于 GetLastError() 。 |
$err,hr | 带文字解释的 LastError 。 |
$env | 进程环境变量 |
$cmdline | 命令行。 |
$pid | 进程 ID |
$tid | 当前线程 ID ,经测试,vs2013 不支持。 |
更多的伪变量请参考 Pseudovariables in the Visual Studio debugger[3]
5. 修饰符
不知道你是否曾经想在 vs
中查看 utf8
类型的字符串呢?是不是不太方便?其实,在 vs
中有一些观察变量的修饰符,可以方便的按照一定的规则查看变量。简单罗列几个常用的修饰符,如下表:
Specifier | Function |
---|---|
s8 | 按 UTF-8 显示字符串 |
su | 按 UTF-16 显示字符串 |
h (x) | 按 16 进制显示数值 |
d | 按 10 进制显示数值 |
c | 按字符显示数值 |
[size] | 把指针当成 size 大小的数组显示 |
expand(n) | 显示第 n+1 个(索引从 0 开始)元素 |
更多的修饰符请参考 Format specifiers for C++ in the Visual Studio debugger[4]
结语
熟练掌握一些调试技巧,对提高调试效率有很大帮助。不知道今天介绍的这 5
个调试技巧,有没有你喜欢的呢?
References:
[1]
Microsoft Child Process Debugging Power Tool: https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool
[2]Introducing the Child Process Debugging Power Tool: https://devblogs.microsoft.com/devops/introducing-the-child-process-debugging-power-tool/
[3]Pseudovariables in the Visual Studio debugger: https://docs.microsoft.com/zh-cn/visualstudio/debugger/pseudovariables?view=vs-2019
[4]Format specifiers for C++ in the Visual Studio debugger: https://docs.microsoft.com/zh-cn/visualstudio/debugger/format-specifiers-in-cpp?view=vs-2019
感谢你的分享,点赞和在看