windows 下使用 mingw编译器 调试时 无法跟进源码

时间:2023-09-16 18:16:26

windows 下使用 mingw编译器 调试时 无法跟进源码

最近在公司使用QT 开发,官方在线下载的 安装的QT mingw 都是没有debug版本的 由于没有debug版本动态库

所以你调试的时候压根就无法跟进QT源代码里,那么找问题的时候 大部分都是跟到汇编代码了。

由于刚来公司不久,人微言轻。我建议统一使用msvc编译 得到拒绝后 没有办法只能重新编译mingw debug版本 了。

下面记录下使用mingw 编译debug 版本步骤

1、 首先准备环境要做好

Perl version 5.12
Python version 2.7
Ruby version 1.9.3

这些东西要先安装好

请自行百度 安装

2、QT环境已经安装好了

打开QT5.15.2(Mingw8.1.0 64-bit) 命令行工具

windows 下使用 mingw编译器 调试时 无法跟进源码

3、在命令行工具中 切换到 你QT安装的目录\版本号\src

执行如下代码

configure -debug -platform win32-g++ -opensource -confirm-license -opengl desktop -prefix "你的qt安装目录/qt版本号"

4、开始构建

mingw32-make
可能会报如下错误
cannot find -lpnp_basictoolsd
collect2.exe: error: ld returned 1 exit status
你QT安装的目录\版本\Src\qtbase\examples\widgets\tools\plugandpaint 下的 pro 文件 编译一个 debug 版本

继续编译

mingw32-make

继续报错 接着解决

C:\Users\HotPixel-2\AppData\Local\Microsoft\WindowsApps\python.exe D:/Qt/5.15.2/Src/qtdeclarative/src/3rdparty/masm/yarr/create_regex_tables > .generated\debug\RegExpJitTables.h
mingw32-make[4]: *** [Makefile.Debug:1059: .generated/debug/RegExpJitTables.h] Error 9009

找到RegExpJitTables.h 生成的所在目录 自己手动执行

python.exe D:/Qt/5.15.2/Src/qtdeclarative/src/3rdparty/masm/yarr/create_regex_tables > RegExpJitTables.h

继续编译

mingw32-make

5、如果构建过程没有错误执行 安装命令即可

mingw32-make install

6、安装完以后 执行aaa 命令时 设置的-prefix参数的目录下 会多出这些文件夹

windows 下使用 mingw编译器 调试时 无法跟进源码

将这些文件夹 复制到 你QT 安装目录/版本号/ 目录下新建一个 mingw84_64_debug 文件夹

如下图目录结构

windows 下使用 mingw编译器 调试时 无法跟进源码

7、打开QT creator 菜单 - 工具-选项-kits

添加你编译好的这个mingw 64 debug 版本环境

windows 下使用 mingw编译器 调试时 无法跟进源码

这个时候在选中 Kits 下的 Kits 项 clone 一份 mingw64 默认的 改下名称 和 QT版本

windows 下使用 mingw编译器 调试时 无法跟进源码

到此即可使用mingw 编译器 完美调试 跟进QT 源代码 定位问题了

  • 打开你的项目 选择你新增加的 mingw 64 debug 版本的环境

    windows 下使用 mingw编译器 调试时 无法跟进源码

  • 看看效果

    原来这段线程池的start 函数我 按F11 是怎么也进不去的

    windows 下使用 mingw编译器 调试时 无法跟进源码

    现在按下F11完美进入

    windows 下使用 mingw编译器 调试时 无法跟进源码

    当然QT 需要设置调试源码的路径步骤也不能少

    windows 下使用 mingw编译器 调试时 无法跟进源码

参考文章如下:

https://doc-snapshots.qt.io/qt5-5.15/windows-building.html