在开发过程中,我们经常用到调试功能,这样方便查找Bug;Qt是一个开源的框架,可以看到源码。虽然但大部分情况下,我们开发时,只是使用,并没有调试它的源码,但如果想深入了解Qt的一些机制原理,可以配置环境调试它的源码。通常,没有勾选默认安装Qt后,编译器默认安装的是MINGW,调试器为GDB。这些都是默认安装好的。但是,如果你有需要使用MSVC编译器,不仅要安装MSVC编译器,还需要安装对应的调试器CDB。 本文介绍如何配置Qt源码的调试环境。
下图是默认安装Qt后的MINGW编译器和GDB调试器配置:
下图是使用MSVC编译器及对应的CDB调试器配置:
注意:下文示例均已MSVC2017_64编译器配置调试为例。实际上使用GDB调试器,不需要下载pdb文件,只需要将源码路径映射添加进去,即可调试。MSVC稍微复杂点,需要将pdb文件放到对应目录才可以调试。
0.调试准备
1.安装Qt 时候,勾选Source选项。
如下图所示:
没有勾选的,可以打开MaintenanceTool.exe工具,选择 [添加或删除组件] ,勾选上Source,点击[下一步],更新即可。
2.下载pdb文件(手动添加需要的文件)
首先说明,没有正确版本的qt库相关的dll对应的dbg文件就无法调试进入qt的源码中!!!所以在下载的时候,一定要选择好自己对应的版本。
Qt所有版本的总目录:
https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/
第三步:
1.我的环境
1.QT版本:5.12.0
2.操作系统:Windows10
3.使用编译器:MSVC2017_64
2.如何添加调试?
2.1手动添加文件(需要将刚才下载的pdb文件已经放到对应的目录中)
2.1.1 Qt Creator
点击顶部菜单栏->工具->选项->调试器->概要->源码路径映射->添加Qt源码->应用
2.1.2 Visual Studio
第一步:
第二步:
[设置]–>[工具]->[选项]-> [调试]-> [符号] ,在右侧 符号文件(.pdb位置)中添加 pdb目录。
(此处我是直接把pdb文件放在对应的bin、lib目录下)
2.2联网下载
2.2.1使用Qt Creator添加下载源(设置临时存储库)
这里设置源进行下载,其实等同于我们上面进入网站去手动下载。仔细看,设置的几个存储库的地址,几乎就是我们上面下载pdb的地址。
一些常用的源:
qt安装包下载_开源镜像站-阿里云
Index of qt/ - SJTUG Mirror Index
Index of /qtproject/
我的源设置如下:
https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x86/desktop/tools_mingw/
https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x86/desktop/qt5_5120/
https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x86/desktop/tools_qtcreator/
https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x86/desktop/qt5_5120_src_doc_examples/
注意:有时候下载的pdb并不是很全,还是需要再手动去下载添加。如果使用不同的源,只需要把前面的 https://mirrors.tuna.tsinghua.edu.cn/ 源路径修改,后面的路径不需要改变。
2.2.2勾选Qt Debug Inforation Files,让其自动下载pdb文件
下载的源设置好以后,还需要勾选Qt Debug Inforation Files选项去下载pdb文件。由于前面我们已经勾选了对应的编译器,所以,下载的时候会根据你所选的编译器去下载对应的pdb文件。
2.2.3前两步完成以后,依旧还需要按照2.1.1步骤添加源码路径映射
即:点击顶部菜单栏->工具->选项->调试器->概要->源码路径映射->添加Qt源码->应用。
2.2.4调试
1.新建一个测试项目,按F9或者直接在对应的行号前面点击一下,出现红点,即表示添加断点成功。
2.点击左下角带有虫子的图标,即表示调试项目。等待程序进入断点即可。进入Qt内部的方法,就可以看到内部源码了。
3.修改源码生效问题
首先应该明白一点,修改源码后,必须重新编译你修改后的源码,生成对应的dll来替换原来的dll;Qt 也是调用dll来工作的,毕竟它只是个编辑器,外加了编译和调试等一些功能而已。然而这里经常出问题的是,既然要编译源码,那么编译器的选择以及一些编译时的一些参数设置,如果不熟悉,极有可能编译失败!就像下面这段总结说的那样好,所以非必要,不建议编译源码。
如果在修改Qt源码后,发现程序运行时并没有生效,可能有以下几个原因:
-
未重新编译Qt库:在修改了Qt源码后,需要重新编译整个Qt库,才能使修改生效。确保已经按照正确的步骤重新编译了整个Qt库。
-
编译器版本不兼容:如果使用的是其他版本的编译器而非官方推荐的版本进行重新编译,可能会导致无法生效。请确认使用的编译器版本是否与官方推荐的一致。
-
编译选项设置错误:在进行重新编译时,需要注意一些选项设置是否正确。例如,在使用qmake生成Makefile文件时,需要指定正确的参数来包含你所做出的修改。
-
Qt库安装路径问题:在重新编译过程中,请确保将新版Qt库安装到一个新目录下,并将该目录添加到环境变量中。如果你仍然使用旧版Qt库,则不会看到任何更新。
-
可能还存在其它原因造成没有生效,可以先检查代码是否真正被调用到、符号表是否匹配等情况。
4.总结补充
其实Qt添加配置源码调试的方法是多种的,只是不同的编辑环境情况稍有不同,几乎大同小异。相信大家走到源码编译这一步,就不会是调试这么简单的情况,很大程度上需要修改其中的某个bug或者功能。如果说没有这样的需求,那做这一步对于我们学习Qt内部的实现逻辑也是非常有帮助的。