Qt 5.9.2的调试器有一个很讨厌的问题:单步步入、单步步过有时候会假死。此时被调试进程处于freeze状态,然而Qt Creator里面不能 resume,中断和暂停按钮也都不能用,最后只能退出整个IDE。 当然此时被调试进程也会挂掉,然后Qt Creator弹出一个窗口:
cdb.exe
卡死的帖子很多,但指定了5.9.2版本的却很少。解决方案五花八门,有换cdb.exe
的,还有换环境的。为避免其他问题,我不想折腾环境和默认的cdb
。既然cdb.exe
不好用,不如直接用微软钦点的调试器Windbg
。
下载Windbg Preview
不能用MS Store的地方参考这个issue。注意Windbg
的Product Id
可能变化。
调试Debug版本
写一个经典的Longest increasing subsequence:
|
|
Windbg
载入,Ctrl+G
到main
,调出源码窗口,然后下断点运行:
可以看到源码断点、局部变量显示的功能都可以用了。但局部变量显示不太友好,把一个类的原始结构显示了出来。我们希望Windbg能像Visual Studio显示std::vector
和std::map
那样,把内部结构转换成数组、键值对等更方便的形式。
这样的功能需要借助natvis
实现,.natvis
文件告诉调试器应该如何显示某种类型的变量。
配置natvis
Qt5.x
版本的.natvis
文件可以参考这个Repo。
.nvload path
加载.natvis
后,变量已能正常显示:
调试Release版本
在qmake
中加入
|
|
即可生成.pdb
文件。毕竟是release build
,调试效果凑合用。