Qt Creator + MinGW 调试失败主因是 gdb.exe 路径错误、版本不兼容或内存超限;应手动替换为 Qt 官方定制的 gdb-i686-pc-mingw32.exe,确保 Kit 中调试器、编译器与 Qt 版本均为匹配的 32 位 MinGW 架构,并关闭杀软拦截。

gdb.exe 路径不对、版本不兼容、或内存超限,是 Qt Creator + MinGW 调试失败的三大主因。直接换用 Qt 官方打包的 gdb-i686-pc-mingw32.exe(非 MinGW 自带的 gdb.exe),基本能绕过 90% 的“Debugger finished with exit code -1”问题。
Qt Creator 找不到或用不了 MinGW 自带的 gdb.exe
MinGW 安装包里附带的 gdb.exe(比如 C:\mingw\bin\gdb.exe)在 Qt Creator 中常报错退出,不是路径错,而是它太老、太轻量,缺少 Qt Creator 调试所需的 MI 协议支持和 Windows 32 位内存管理能力。
- 别依赖自动检测——Qt Creator “自动检测调试器”大概率会选中这个不可靠的
gdb.exe,必须手动替换 - 正确做法:去 Qt Creator 官方归档页 下载对应平台的
qtcreator-gdb-7.4-MINGW32_NT-6.1-i686.tar.gz,解压后取其中的gdb-i686-pc-mingw32.exe - 路径示例:
C:\Qt\Tools\mingw73_32\qtcreator-gdb\gdb-i686-pc-mingw32.exe(注意不要放在bin目录下,避免被误识别) - 配置入口:工具 → 选项 → 构建与运行 → 调试器 → 点击“添加”,类型选“GDB”,路径填上面那个
gdb-i686-pc-mingw32.exe
Kit 配置里调试器和编译器不匹配
即使你填对了 gdb-i686-pc-mingw32.exe,如果 Kit(构建套件)里绑定的编译器是 mingw73_64 或 msvc2019,调试器照样罢工——GDB 只认同架构、同 ABI 的可执行文件。
- 确认你的 Kit 使用的是 32 位 MinGW(如
MinGW 7.3.0 32-bit),而不是 64 位或 MSVC - 检查 Kit 对应的 Qt 版本是否也是 32 位(
Qt 5.15.2 MinGW 32-bit),否则符号表无法加载,断点无效 - 调试时若提示 “No debugging symbols found”,八成是 Kit 混用了不同位数或不同 ABI(dwarf vs sjlj)的工具链
- 一个快速验证法:在项目根目录执行
mingw32-make clean && mingw32-make debug,看生成的.exe是否带调试信息(file yourapp.exe应含 “with debug_info”)
调试时卡住、断点不命中、堆栈为空
这类现象表面是 UI 停滞,根源往往是 GDB 启动后没收到有效响应,常见于 Windows 杀毒软件拦截、GDB 内存溢出、或项目链接了 MSVC 编译的第三方库。
- 关闭 Windows Defender 实时防护,或把
gdb-i686-pc-mingw32.exe加入白名单——很多杀软会静默终止 GDB 子进程 - 在
Projects → Build & Run → Build Steps → Make → Additional arguments中加-j1,避免多线程构建干扰调试器初始化 - 确保
.pro文件里有CONFIG += debug且没写CONFIG -= debug_and_release(后者会禁掉调试符号) - 若调用 OpenCV、Boost 等库,确认它们也是用同版本 MinGW + dwarf ABI 编译的;混用 sjlj ABI 的库会导致 GDB 解析崩溃
为什么不用新版本 GDB?
你可能会想:既然 7.4 太老,那换成 GDB 13.x 不就万事大吉?不行。新版 GDB 默认启用 Python 支持、TUI、以及更严格的符号解析逻辑,在 Qt Creator 的 MI 协议封装层下极易触发死锁或协议解析错误。
- Qt Creator 4.13–4.15 系列对 GDB 的兼容锚定在 7.4–7.11 区间,超出此范围的 GDB(尤其 >8.3)未经过充分测试
- 官方提供的
gdb-i686-pc-mingw32.exe是打过补丁的定制版,修复了 Windows 32 位下fork()模拟、内存映射、以及 Unicode 路径处理等关键问题 - 强行升级 GDB 后出现 “Unable to create a debugging engine” 或 “GDB exited unexpectedly”,基本就是 ABI 或协议层不兼容的明确信号
gdb-i686-pc-mingw32.exe 路径正确、Kit 架构一致、杀软放行、且没混用 ABI 不同的库,调试流程就会回归“打点 → F5 → 停住”的朴素状态。其余所有花哨配置,都是在掩盖这四个条件中的某一个没满足。


















