Windows上Qt源码调试(使用VS或Qt Creator)

这里分两种情况,使用 Qt Creator 或者 Visual Studio,我以 Qt5.12.6 和 VS2019 来做示例。

1.使用 Qt Creator

首先,确保自己的 CDB(MSVC用) 或者 GDB(MinGW用) 已经配置好了,不然你也没法调试。其中 GDB 安装的时候选了 MinGW 默认就有,而 CDB 需要自己装(https://blog.csdn.net/qq_32768743/article/details/84938265),如果使用的 Qt 在线安装包你把 Debug Tool for Windows 和 Qt Debug Information Files 勾选上就好了。

Windows上Qt源码调试(使用VS或Qt Creator)

其次,Qt Creator 断点调试需要在 Debug 模式下才有效。

一般情况下,我们断点调试进入 Qt 类的函数里是一堆汇编,我们需要配置下源码。先把所用 Qt 库版本对应源码下下来解压(http://download.qt.io/archive/qt/5.12/5.12.6/single/),或者安装时选择把源码(source 选项)一并安装。

Windows上Qt源码调试(使用VS或Qt Creator)

Windows上Qt源码调试(使用VS或Qt Creator)

接下来设置源码路径,打开 Qt Creator ,菜单中依次点击【工具】【选项】【调试器】【概要】,右侧有【添加Qt源码】按钮,点击之后选择你源码所在目录即可(注意源码要和当前使用库的版本要一致,至少大版本兼容)。

Windows上Qt源码调试(使用VS或Qt Creator)

接下来随便测试下,打个断点,单步调试。F5 开始调试(或点击带虫子的绿三角调试运行),F11 进行单步调试(或点击 Step Into 按钮)。可以看到,现在已经可以正常进入 Qt 源码,而不是一堆汇编了。

Windows上Qt源码调试(使用VS或Qt Creator)

Windows上Qt源码调试(使用VS或Qt Creator)

可以发现,如果是 MSVC 编译器的话,还需要 pdb 文件,不然最后还是不能进入源码的(MinGW没影响)。不同版本的 pdb 文件,Qt 放的目录不同,以前有些可能直接和 exe 安装包同一个下载目录,Qt5.12 的话在这个目录了:https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/

打开 Qt 安装目录的管理工具  MaintenanceTool.exe,依次点击【设置】【资料档案库】【临时资料档案库】【添加】,在后在资料档案库位置填你对应的版本(你也可以直接下载下来)。这里我是参照https://blog.simbot.net/index.php/2019/07/28/qt-debug-symbols/

Windows上Qt源码调试(使用VS或Qt Creator)

可以看到一个 Debug Info File 的东西(如果你是用的在线安装包,本来就有这个选项):

Windows上Qt源码调试(使用VS或Qt Creator)

然后漫长的在线安装过程,安装完即可进行 MSVC 版本的源码调试了。

2.使用 Visual Studio

使用 VS 的好处是相比 Creator 调试工程更强大。

用 VS 进行 Qt 源码调试的话也是需要 pdb 文件的,可以参照上一节安装。

然后我们配置下源码路径,在解决方案的属性页(不是工程属性)里添加源文件目录(这里和 Qt Creator 有点不一样,我用 Qt5.12.6 没法加载 Qt5.12.4 的源码,换成对应版本源码就好了):

Windows上Qt源码调试(使用VS或Qt Creator)

然后设置 pdb 路径,点击 VS 菜单的【工具】【选项】【调试】【符号】,把 pdb 文件的路径设置下:

Windows上Qt源码调试(使用VS或Qt Creator)

打个断点调试下:

Windows上Qt源码调试(使用VS或Qt Creator)

成功进入源码(加载 pdb 符号文件挺慢的):

Windows上Qt源码调试(使用VS或Qt Creator)

本节参照:https://www.jianshu.com/p/15333f44df4b

3.参考

参考博客(Qt+MSVC):https://blog.csdn.net/qq_32768743/article/details/84938265

参考博客(Qt Creator):https://www.cnblogs.com/Braveliu/p/7423629.html

参考博客(VS):https://blog.csdn.net/tanjiaqi2554/article/details/80296170

参考博客(VS):https://www.jianshu.com/p/15333f44df4b

参考博客(Qt5.12 pdb):https://blog.simbot.net/index.php/2019/07/28/qt-debug-symbols/