[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)

        在开发过程中,我们经常用到调试功能,这样方便查找Bug;Qt是一个开源的框架,可以看到源码。虽然但大部分情况下,我们开发时,只是使用,并没有调试它的源码,但如果想深入了解Qt的一些机制原理,可以配置环境调试它的源码。通常,没有勾选默认安装Qt后,编译器默认安装的是MINGW,调试器为GDB。这些都是默认安装好的。但是,如果你有需要使用MSVC编译器,不仅要安装MSVC编译器,还需要安装对应的调试器CDB。 本文介绍如何配置Qt源码的调试环境。

下图是默认安装Qt后的MINGW编译器和GDB调试器配置:

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第1张图片

 [QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第2张图片

 下图是使用MSVC编译器及对应的CDB调试器配置:

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第3张图片

 [QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第4张图片

 注意:下文示例均已MSVC2017_64编译器配置调试为例。实际上使用GDB调试器,不需要下载pdb文件,只需要将源码路径映射添加进去,即可调试。MSVC稍微复杂点,需要将pdb文件放到对应目录才可以调试。

0.调试准备

1.安装Qt 时候,勾选Source选项。

如下图所示:

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第5张图片

没有勾选的,可以打开MaintenanceTool.exe工具,选择 [添加或删除组件] ,勾选上Source,点击[下一步],更新即可。

2.下载pdb文件(手动添加需要的文件)

首先说明,没有正确版本的qt库相关的dll对应的dbg文件就无法调试进入qt的源码中!!!所以在下载的时候,一定要选择好自己对应的版本。

Qt所有版本的总目录:

https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/

在该路径下根据 Qt 版本号查找对应版本,我的版本是 5.12.0 ,对应的版本号就是 qt5_5120
我的版本号对应的下载路径是:
Index of /online/qtsdkrepository/windows_x86/desktop/qt5_5120/qt.qt5.5120.debug_info.win64_msvc2017_64
下载完成后,将解压后的文件夹内对应编译器-对应的文件夹内的pdb文件放到Qt安装目录相同的文件夹下。例如下图所示:

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第6张图片 

如何查找下载自己对应的版本文件?
第一步:
[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第7张图片

 

第二步:
[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第8张图片

 第三步:

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第9张图片

 

1.我的环境

1.QT版本:5.12.0

2.操作系统:Windows10

3.使用编译器:MSVC2017_64

2.如何添加调试?

2.1手动添加文件(需要将刚才下载的pdb文件已经放到对应的目录中

2.1.1 Qt Creator

点击顶部菜单栏->工具->选项->调试器->概要->源码路径映射->添加Qt源码->应用

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第10张图片

 

2.1.2 Visual Studio 

第一步:

右键解决方案,选择[属性]–> [通用属性]–> [调试源文件],在窗口内添加源码路径。
[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第11张图片

第二步:

 [设置]–>[工具]->[选项]-> [调试]-> [符号] ,在右侧 符号文件(.pdb位置)中添加 pdb目录。

(此处我是直接把pdb文件放在对应的bin、lib目录下)

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第12张图片

 

2.2联网下载

2.2.1使用Qt Creator添加下载源(设置临时存储库)

这里设置源进行下载,其实等同于我们上面进入网站去手动下载。仔细看,设置的几个存储库的地址,几乎就是我们上面下载pdb的地址。

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第13张图片

一些常用的源:

 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文件。

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第14张图片

 [QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第15张图片

2.2.3前两步完成以后,依旧还需要按照2.1.1步骤添加源码路径映射

即:点击顶部菜单栏->工具->选项->调试器->概要->源码路径映射->添加Qt源码->应用。

2.2.4调试

1.新建一个测试项目,按F9或者直接在对应的行号前面点击一下,出现红点,即表示添加断点成功。

 

2.点击左下角带有虫子的图标,即表示调试项目。等待程序进入断点即可。进入Qt内部的方法,就可以看到内部源码了。

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第16张图片

[QT_055]设置QT源码调试(qtc+vs/mingw+msvc)_第17张图片  

3.修改源码生效问题

        首先应该明白一点,修改源码后,必须重新编译你修改后的源码,生成对应的dll来替换原来的dll;Qt 也是调用dll来工作的,毕竟它只是个编辑器,外加了编译和调试等一些功能而已。然而这里经常出问题的是,既然要编译源码,那么编译器的选择以及一些编译时的一些参数设置,如果不熟悉,极有可能编译失败!就像下面这段总结说的那样好,所以非必要,不建议编译源码。

如果在修改Qt源码后,发现程序运行时并没有生效,可能有以下几个原因:

  1. 未重新编译Qt库:在修改了Qt源码后,需要重新编译整个Qt库,才能使修改生效。确保已经按照正确的步骤重新编译了整个Qt库。

  2. 编译器版本不兼容:如果使用的是其他版本的编译器而非官方推荐的版本进行重新编译,可能会导致无法生效。请确认使用的编译器版本是否与官方推荐的一致。

  3. 编译选项设置错误:在进行重新编译时,需要注意一些选项设置是否正确。例如,在使用qmake生成Makefile文件时,需要指定正确的参数来包含你所做出的修改

  4. Qt库安装路径问题:在重新编译过程中,请确保将新版Qt库安装到一个新目录下,并将该目录添加到环境变量中。如果你仍然使用旧版Qt库,则不会看到任何更新。

  5. 可能还存在其它原因造成没有生效,可以先检查代码是否真正被调用到、符号表是否匹配等情况。

4.总结补充

其实Qt添加配置源码调试的方法是多种的,只是不同的编辑环境情况稍有不同,几乎大同小异。相信大家走到源码编译这一步,就不会是调试这么简单的情况,很大程度上需要修改其中的某个bug或者功能。如果说没有这样的需求,那做这一步对于我们学习Qt内部的实现逻辑也是非常有帮助的。

你可能感兴趣的:(#,Qt学习记录,qt)