VS2022 And QtCreator10 调试 Qt 源码教程

文章目录

    • 背景
    • IDE 调试 Qt 源码
      • Visual Studio 2022
      • Qt Creator 10.0.1
    • 排查思路
    • 姊妹篇
    • 系列

简 述: 记录使用 Visual Studo 2022 和 QtCreator10 调试 Qt 5.15 源码和 加载 .pdb 的方法。


本文初发于 “偕臧的小站”,同步转载于此。


背景

源码:*.h *.cpp

符号调试包:*.pdb (属 Windows 专有)

动态链接库: *.dll

静态链接库: *.lib (通常是前者,也可以是 .dll 的符号信息,编译时刻使用)

your.exe 可以进行单步调试 == your源码 + your.pdb + your.dll + microsoft.pdb + microsoft.dll + 这些文件路径全部设置正确


IDE 调试 Qt 源码

以下两个 IDE 均使用 ”MSVC 2022 + Qt 5.15.2" 来编译项目作为示范,且生成的 x86 的 Debug 模式的 your.exe。


Visual Studio 2022

  1. Visual Studio 2022 依次打开 菜单栏的【Tools】【Options】,进入【Debugging】【Symbols】添加 Qt 的符号调试包路径

  2. 右键打开解决方案的属性【Solution】【Properties】,【Debug Source Files】添加源码路劲

  3. 编译工程,模式为 Debug、Win32,设置断点【F9】后,开启运行调试【F5】,卡住断点,再怕【F11】 进入任何一个 Qt 源码的函数调试, QWidget::show() 函数为例

  4. 若是每次 【F9】调试加载很慢,是因为每次从微软服务器拉取这些文件到本地比较耗时。也在步骤1中,和我一样取消【Microsoft Sysbol Servers】前面的勾,调试很快且顺滑,且不影响正常的软件调试功能。


Qt Creator 10.0.1

  1. Qt Creator 10.0.1 依次打开 菜单栏的【Edit】【Preferences】,进入【Debugger】【Source Path Mapping】【Add Qt sources…】添加 Qt 的源码路径,此处是调试需要

  2. 【Debugger】【CDB Paths】的 “Symbol Paths” ,“Source Paths” 添加 MSVC 的符号调试包的路径和源码路径。

  3. 【Enviroment】【Locator】【Custom】添加 Qt 的源码路径和自定义的文件路径,作用是便于快捷键直接定位具体文件。注意此处路径分隔符号是 /

    快捷键【Ctrl + K】快速定位左下角,然后搜索 Qt 源码的文件名以及自定义项目的文件名称,迅速切换,体验极佳

  4. 编译工程,模式为 Debug、32bit,设置断点【F9】后,开启运行调试【F5】,卡住断点,再怕【F11】 进入任何一个 Qt 源码的函数调试, QWidget::show() 函数为例


排查思路

若用 VS2022 / QtCreator 10.0.1 单步调试 Qt 源码失败,排查原因

  1. 安装 Qt 时候亦下载了 Qt 源码和 符号调试包
  2. your.exe + your.dll 生成到你设置的预期的路径,且放在同一级
  3. 如 Qt5Guid .dll (Debug 模式下 dll 名称含 d)
  4. 加载了 pdb (确定版本没下错)
  5. 解决方案加载了 src源码
  6. 加载了符号调试包路径
  7. 编译的 your.exe 是对应 MSVC、 x86 且是 debug 模式
  8. 若是 x64 或者其它 Kit 调试原理相同

姊妹篇

  • VS2017 调试 Qt 源码,安装 PDB
  • VS2019 调试 Qt5 时 QString 显示为内存地址而非字符串
  • VS2022 And QtCreator10调试Qt源码教程

若是 IDE 调试时发现没有 Qt 的符号调试包,教程可参考姊妹篇一;以及学会如何查看 对应模块是否加载


系列

QtExamples

欢迎 star ⭐ 和 fork 🍴这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3295.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考A计划-系统集成项目管理工程师-项目范围管理(一)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

C# Excel 表列序号

171 Excel 表列序号 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: columnTitle “A” 输出: 1 示例 2: …

数据库原理之数据库事物

文章目录 一、事物介绍1.1 事物的目的是保证数据的一致性1.2 事物的ACID A、I、D是为了实现 C1.3 什么是本地事物(Local Transactions) 二、数据库系统如何实现ACID2.1 影响深远的ARIES理论2.2 本地事物如何实现原子性和持久性 A、D2.2.1 实现原子性和持久性的Commit Logging方…

基于物联网、区块链技术的质量管控防伪溯源系统源码

一物一码防伪溯源系统能准确获取产品生产经营各个环节的真实信息,利用物联网、云计算 、区块链、人工智能、5G等先进技术,结合特有的码码关联和RSA加密验证技术,建立区块链的“身份证”,针对产品生长到销售各环节的质量安全数据进…

结构体和数据结构--结构体数组的定义和初始化

目录 一、结构体数组的定义 二、结构体数组的初始化 一、结构体数组的定义 一个结构体变量只能表示学生成绩管理表中的一个学生的记录信息,代表其中的一个实例,而实际数据库中有多个学生的记录,每个记录对应一个学生的信息,如何…

MySQL----MHA高可用

文章目录 一、MHA理论1.1什么是 MHA1.2MHA 的组成1.3MHA 的特点 二、MHA的一主两从部署实验设计故障修复步骤: 一、MHA理论 1.1什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出…

初识Docker:(7)查询Docker镜像的DockerFile

1. 前言 我们知道了根据dockerfile来制作镜像,如果给你一个现成的镜像,你能逆向查看出dockerfile吗? 否则,你怎么知道该镜像使用的是CMD还是ENTRYPOINT ,使用的是shell格式还是CMD格式?由于格式决定了doc…

【HTML5】svg 绘制图形

文章目录 一、基本介绍二、用法详解2.1、矩形(rect)2.2、圆形(circle)2.3、椭圆(ellipse)2.4、线条(line)2.5、折线(polyline)2.6、多边形(polygo…

Anaconda详细安装及配置教程(Windows)

Anaconda详细安装及配置教程(Windows) 一、下载方式1、官网下载2、网盘下载 二、安装三、配置四、创建虚拟环境 一、下载方式 1、官网下载 点击下载 点击window下载即可。 2、网盘下载 点击下载 二、安装 双击运行 点next 点I agree next 如…

springboot定时任务详解

文章目录 一、基于注解(静态)1、添加依赖2、创建定时任务3、参数说明 二、基于接口(动态)1、添加依赖2、添加数据库记录3、创建定时器4、启动测试 三、Quartz1、添加依赖2、编写任务类3、编写配置类4、启动项目 在我们开发项目过程…

go channel 详解

一、概述 在Go语言中,channel是一种特殊的类型,用于在并发编程中实现不同的goroutine之间的通信和同步。本文将深入探讨golang的channel是如何工作的,并介绍如何使用channel来提高程序的性能和可靠性。 二、什么是Channel? 在G…

Kafka

资料来源视频:尚硅谷-Kafka3.x教程 一、Kafka概述 1.1 定义 Kafka传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(MessageQueue),主要应用于大数据实时处理领域。 发布订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是…