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的运作机制。大家一起动手来玩吧。
相关文章:
Qt源码调试步骤记录
1.源码: 两种方式,要么安装qt时选择source,要么从官网下载源码,然后在qt creator中设置路径。二选一即可。我选的第二种。 1.1.第一种,安装时选择source: 1.2.第二种,下载源码设置路径&#x…...
大数据面试英文自我介绍参考(万字长文)
发现有一个怪圈,如果码农年龄35+,除非非常匹配,不然在国内企业筛选可能就筛选不过。国外码农可以干到40+、50+。一些外企,对年龄35+的码农依然青睐。这些外企对英文是有要求,通常是要英文自我介绍,下面提供一些英文自我介绍参考。 参考1: Good morning/afternoon, I a…...
外包干了5天,技术退步明显.......
先说一下自己的情况,大专生,18年通过校招进入杭州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...
Docket常见的软件部署1
1 安装MySQL # 查看MySQL镜像 docker search mysql # 拉起镜像 docker pull mysql:5.7 # 创建MySQL数据映射卷,防止数据不丢失 mkdir -p /hmoe/tem/docker/mysql/data/ # 启动镜像 docker run -d --name mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -v /home…...
Qt源程序编译及错误问题解决
Error 5 while parsing C:/qt-everywhere-src-6.6.2/qt-build/qtdeclarative/src/qmlmodels/meta_types/qt6qmlmodels_release_metatypes.json: illegal value .json 文件为空文件0字节,加 “[]”,不要引号。可以解决这类错误。 Qt编译 Qt for Windows…...
作业练习(python)
第一题: cel eval(input()) fah 9 / 5 * cel 32 print("%.1f" % fah) 第二题: radius, length eval(input()) area radius * radius * 3.14159267 volume area * length print("%.2f" % area) print("%.2f" …...
Wireshark使用相关
1.wireshark如何查看RST包 tcp.flags.reset1 RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送R…...
相机标定学习记录
相机标定是计算机视觉和机器视觉领域中的一项基本技术,它的主要目的是通过获取相机的内部参数(内参)和外部参数(外参),以及镜头畸变参数,建立起现实世界中的点与相机成像平面上对应像素点之间准…...
CSS 滚动条样式修改
1、滚动条整体部分 使用 ::-webkit-scrollbar 注意:这个必须要加,不然修改的样式不生效 ::-webkit-scrollbar {width: 10px;//修改滚动条宽度 }2、滚动条中的滑块 使用 ::-webkit-scrollbar-thumb ::-webkit-scrollbar-thumb {border-radius: 8px;b…...
谈谈配置中心?
配置中心可以做集中式的服务配置管理,比如配置一些数据库连接的URL,一些共用的配置且可动态调整的参数。如果不采用集中式的管理,会导致修改起来特别麻烦,一个个的修改特别繁琐。 Nacos Config配置中心中采用的是客户端拉取数据&a…...
人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍
大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型25-基于pytorch搭建FPN特征金字塔网络的应用场景,模型结构介绍。特征金字塔网络(FPN)是一种深度学习模型结构,主要应用于目标检测任务中&am…...
JRT业务开发起步
这是一段充满挑战与奋斗的旅程,自第一行Java代码的写下起,便历经重重险阻。从细微的代码行,逐步汇聚成实用的工具类方法;从工具类方法的积累,逐渐构建起功能强大的工具包;再从工具包的整合,最终…...
深度解析:国内主流音视频产品的核心功能与市场表现
前言 当前音视频开发领域呈现出多样化竞争态势,其中声网(Agora)、即构(ZEGO)等云通讯企业占据了市场的主导地位。随着技术的持续进步和用户需求的日益多样化,选择音视频服务提供商的标准也越来越个性化&am…...
红黑树介绍及插入操作的实现
🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…...
[linux初阶][vim-gcc-gdb] TwoCharter: gcc编译器
目录 一.Linux中gcc编译器的下载与安装 二.使用gcc编译器来翻译 C语言程序 ①.编写C语言代码 ②翻译C语言代码 a.预处理 b.编译 c.汇编 d.链接 ③.执行Main 二进制可执行程序(.exe文件) 三.总结 一.Linux中gcc编译器的下载与安装 使用yum命令(相当于手机上的应用…...
单例设计模式(2)
单例设计模式(2) 单例模式存在的问题 单例对 OOP 特性的支持不友好 oop的特性:封装、继承、多态、抽象;以Id生成器代码为例,如果未来某一天,我们希望针对不同的业务采用不同的 ID 生成算法。比如&#x…...
boost::asio 启用 io_uring(Linux 5.10)队列支持
欲启用 boost::asio 对于 io_uring 的支持,这需要以下几个先决条件; 1、boost 1.78 及以上发行版本 Revision History - 1.78.0 (boost.org) 2、Linux kernel 5.10 及以上发行版本 3、在预定义头文件(stdafx.h)、或编译器预定义…...
Android 自定义坐标曲线图(二)
Android 自定义坐标曲线图_android 自定义曲线图-CSDN博客 继上一篇文章,点击折线图上的点,显示提示信息进行修改,之前通过回调,调用外部方法,使用popupwindow或dialog来显示,但是这种方法对于弹框显示的位…...
每日OJ题_子序列dp⑧_力扣446. 等差数列划分 II - 子序列
目录 力扣446. 等差数列划分 II - 子序列 解析代码 力扣446. 等差数列划分 II - 子序列 446. 等差数列划分 II - 子序列 难度 困难 给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。 如果一个序列中 至少有三个元素 ,并且任意两个相邻…...
GOPROXY 代理设置
通常报错: 1.http: server gave HTTP response to HTTPS client 2.timeout 解决指令:(会话临时性),长久的可以在配置文件中配置 go env -w GOPROXYhttps://goproxy.cn,direct 长久的,在~/.bashrc文件中添加: expo…...
安卓全局音效处理:RootlessJamesDSP原理、配置与调优实战
1. 项目概述:在移动音频领域实现高自由度音效处理如果你是一名对手机音质有追求的发烧友,或者是一位喜欢折腾系统级音频设置的安卓用户,那么“RootlessJamesDSP”这个名字你很可能不会陌生。简单来说,这是一个无需获取安卓系统最高…...
观察Taotoken用量看板如何帮助团队透明化管理API成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken用量看板如何帮助团队透明化管理API成本 作为团队的技术负责人,管理大模型API成本是一项持续且细致的工作…...
AI时代计算机教育变革:从代码生成到系统设计的教学重构
1. 项目概述:当AI走进计算机课堂,我们面临的真实图景作为一名在计算机教育一线摸爬滚打了十几年的从业者,我亲眼见证了从粉笔黑板到多媒体教室,再到如今云端协作的变迁。但最近两年,以ChatGPT、GitHub Copilot为代表的…...
Cadence IC617虚拟机导入后,Calibre DRC报License错误的保姆级修复指南
Cadence IC617虚拟机导入后Calibre DRC报License错误的终极解决方案 当你兴冲冲地打开从同事那里拷贝的Cadence IC617虚拟机镜像,准备开始芯片设计工作时,突然跳出的Calibre DRC license错误提示就像一盆冷水浇下来。这种"拿来即用"的环境本应…...
终极代码统计指南:cloc压缩包分析与Git版本对比实战
终极代码统计指南:cloc压缩包分析与Git版本对比实战 【免费下载链接】cloc cloc counts blank lines, comment lines, and physical lines of source code in many programming languages. 项目地址: https://gitcode.com/gh_mirrors/cl/cloc cloc是一款强大…...
欧盟单一电信市场:技术规则重塑与产业影响分析
1. 项目概述:一场迟来的电信革命作为一名在通信行业摸爬滚打了十几年的工程师,我经历过从2G到5G的每一次技术迭代,也见证过不同市场间因政策壁垒而导致的种种怪象。比如,你带着一部手机在欧洲大陆旅行,从德国到法国不过…...
多层板钻靶精度为什么越来越难控制?一套X-RAY预对位+六轴机械手的自动化方案解析
背景在高多层板和HDI板生产中,钻靶精度是影响良率的核心环节之一。压合后内层靶点被外层铜箔覆盖,传统视觉系统只能识别表面标记,无法获取真实的内层位置数据。同时,上料对位若依赖人工操作,放板角度和位置存在批次差异…...
AI时代工程师的超能力进化
好的,这是一篇关于AI时代工程师能力进化的技术文章大纲: 标题: AI时代工程师的“超能力”进化论:从工具使用者到智能架构师 导言: 简述AI技术的迅猛发展及其对各行业的深刻影响。提出问题:在AI成为强大“…...
C++数据结构进阶|排序:吃透O(n log n)核心算法,搞定面试高频考点
文章目录 前言 一、希尔排序(Shell Sort)—— 插入排序的进阶优化版 二、快速排序(Quick Sort)—— C面试手写高频,实际开发首选 三、归并排序(Merge Sort)—— 稳定排序的核心选择 四、堆排…...
BBDown终极指南:5分钟掌握B站视频本地化完整解决方案
BBDown终极指南:5分钟掌握B站视频本地化完整解决方案 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 在数字内容爆炸的时代,你是否曾为无法离线观看B站优质视频…...
