Fari

Windbg

记一次QT程序Debug的过程(WinDbg的使用)

环境

WinDbg preview,Debugger client version: 1.2210.3001.0,Debugger engine version: 10.0.25200.1003

下载路径:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools

QtCreator 7.0.2,Qt 6.2.3,MSVC 2019 64位

现象

程序异常退出,没有提示原因

找原因

1. debug方式qt打包exe

步骤见:https://blog.woyou.cool/post/4225

2. 使用WinDbg打开exe

3. 设置debug环境

pdb文件干啥的?

如果用debug模式打的包会在exe同级目录下生成一个pdb文件,该文件保存了一些debug需要的符号信息,如果没有该文件的话报错提示就会很隐晦

为啥需要设置源文件?

为了报错后能定位到报错位置,你本身已经打包成exe了,不包含源码了

也可以使用命令设置它们

# 设置源码位置
.srcpath [your source code location]

4. 启动程序

5. 程序崩溃时就会有堆栈信息

6. 查看详细异常信息

输入命令

!analyze -v

然后就能看到如下信息

由上述信息就可知出现空指针的位置

问题

源码显示不对应

见下图,一开始我很奇怪为什么我源码都注释掉了它还是提示这个地方有问题,更奇怪的是它竟然还有注释掉的局部变量信息

这其实就是上面第3步中源码和pdb文件位置设置的不对导致的,或者你在开始debug后修改了源码(这里显示的源码是和文件中的修改实时同步)

debug release版本

在 pro 文件中加入以下两行代码

# 生成pdb文件
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO

没有 QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO 无法生成 pdb 文件