Qt源码调试步骤记录

1.源码:

两种方式,要么安装qt时选择source,要么从官网下载源码,然后在qt creator中设置路径。二选一即可。我选的第二种。

1.1.第一种,安装时选择source:

1.2.第二种,下载源码+设置路径:

我用的qt版本是5.14.2,所以源码路径是:

https://download.qt.io/archive/qt/5.14/5.14.2/single/qt-everywhere-src-5.14.2.zip

解压缩以后,这种qt creator中设置路径。“工具”》“调试器”》“概要”:

按照图片中标记的数字顺序操作,主要是路径,直接是源码根目录即可。

到这里,qt源码本身就设置好了。要像调试自己代码一样可以打断点逐句调试,还需要pdb调试信息(符号表)。

2.调试信息:

所谓调试信息也是一些文件,我认为就相当于一些索引锚点,逐一对应了代码位置,所以调试的时候才有断点和逐句调试。显然这东西与源代码有关,qt有多少的代码模块,就得相应有多少调试信息。从官网下载地址就能看出来。而且它是和编译器相关的。

https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5142/qt.qt5.5142.debug_info.win64_msvc2017_64/5.14.2-0-202003291224qtbase-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64-debug-symbols.7z

就如上面的链接这样,我下载的是win64下的5.14.2,msvc2017编译器相关的debug_info。本来我用的编译器是mingw73_64位,但是我没找到相关的debug_info,用msvc一样道理。

但是注意,下载那里有很多debug_info,看名字就知道,跟qt源码对应的,我只下载了qtbase相关的,如果真实项目中需要,再对号入座就行了。

下载以后解压缩, 一看就知道,正好对应qt安装的编译器目录层级,复制过去合并就行了。

比如我本机的路径是D:\Qt\Qt5.14.2\5.14.2\msvc2017_64,把刚才解压缩的目录复制过来合并即可。

至此,准备工作已经做好了。可以直接开始调试。

3.调试:

随便新建一个项目,但是调试的时候,编译器一定的要和debug_info使用的一样。比如上面我下载的msvc2017,那么调试时也要选择msvc2017。

在main函数的a.exec那里打个断点,然后运行程序。

会发现下面的“WinMain”居然是亮色的,可以跟踪进去了。点进去看看。

可以看到main函数被调用的过程。

回到main函数,按f11进入细节。

然后就不用细说了。可以一直f11跟踪下去。

但是要注意,它不能像调试自己代码一样直接转到定义。比如上面这样,把鼠标移动到return QGuiApplication::exec();的exec那里,按住ctrl直接点击的话,它不是直接跳转到这个exec函数体定义,而是跳转到声明。只能接着按f11跟进去,然后再按ctrl+点击就可以在声明和定义之间切换了。

就按上面说的,一直跟踪下去,发现exec函数最根本是这样的:

是不是跟我们写多线程时,使用的事件循环一样啊?此处顺便提及一下我以前写的博客记录,可以前后联想一下。

【Qt线程-2】事件循环(QCoreApplication::processEvents,exec)的应用-CSDN博客

其实,继续跟踪qt的事件循环处理,会发现它最终本质就是手册里说的那样,其实是消息队列处理。再往深的说线程和movetothread,本质上还是基于消息队列。

4.总结:

所以,源码调试多好玩,可以深入学习和理解qt的运作机制。大家一起动手来玩吧。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 18:10:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 18:10:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 18:10:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 18:10:02       20 阅读

热门阅读

  1. TCP建立连接时,为什么每次的SYN都不一样

    2024-03-29 18:10:02       17 阅读
  2. Qwen1.5模型微调部署全过程

    2024-03-29 18:10:02       13 阅读
  3. 【无标题】

    2024-03-29 18:10:02       17 阅读
  4. AI大模型学习:AI大模型在特定领域的应用

    2024-03-29 18:10:02       20 阅读
  5. HDU水题刷题记录

    2024-03-29 18:10:02       21 阅读
  6. C#WPF将变量或自定义数据类绑定到控件实例

    2024-03-29 18:10:02       19 阅读
  7. vue做一个锁屏禁止页面前进后退

    2024-03-29 18:10:02       17 阅读
  8. Android JNI开发定义全局变量

    2024-03-29 18:10:02       16 阅读
  9. 面试:Elasticsearch是如何实现Master选举的?

    2024-03-29 18:10:02       17 阅读
  10. 3.25 ARM day8

    2024-03-29 18:10:02       18 阅读
  11. multiprocessing的方法说明

    2024-03-29 18:10:02       18 阅读