Qt GDB 无法调试 MSVC 编译的程序而报错:file format not recognized

环境

  • Windows 10 x64
  • Visual Studio 2017
  • Qt 5.11

异常

Qt Debug 时提示异常:

qt not in executable format. file format not recognized

qt-not-in-executable-format-file-format-not-recognized

原因

编译器(Compiler)使用了 64 位版本的 MSVC,调试器(Debugger)却使用了 32 位的 MinGW 的 GDB,从而 GDB 不能调试 64 位程序而报错。

解决

  • 在 Qt 的 工具 - 选项 - 构建和运行 - Debuggers 选择 CDB(Debugging Tools for Windows),
  • 不能自动检测到则手动添加,如:C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
  • 没有 cdb 则下载:Windows Driver Kit (WDK)(下载装好后重启 Qt 一般就可以自动检测到)
### 解决方案分析 当在 `aarch64-linux-gnu` 平台上使用 GDB 打开核心转储文件 (core dump) 时遇到 `'not in executable format: file format not recognized'` 错误,通常是因为以下几个原因之一: 1. **目标平台与主机不匹配**:如果使用的 GDB 版本或工具链不符合目标架构,则可能导致无法识别可执行文件格式。 2. **缺少合适的调试符号**:如果没有提供正确的可执行文件及其对应的调试信息,GDB无法解析核心转储文件。 3. **配置错误的 GDB 或工具链版本**:某些情况下,特定版本的 GDB 可能存在兼容性问题。 以下是详细的解决方案: --- #### 工具链验证 确保正在使用适合 `aarch64-linux-gnu` 架构的工具链。例如,可以通过以下命令构建支持该架构的 GDB[^1]: ```bash /home/share/work/gdb-9.2/configure --build=aarch64 --host=aarch64-linux-gnu --target=aarch64-linux-gnu --prefix=/home/share/work/gdb --disable-host-shared --disable-libmcheck make && make install ``` 上述过程会生成针对 `aarch64-linux-gnu` 的专用 GDB 版本。如果当前环境中的 GDB 是通用版而非交叉编译版,则可能引发此问题。 --- #### 验证可执行文件和核心转储文件的一致性 确认用于生成核心转储文件的程序与其对应的核心转储文件属于同一架构,并且具有完整的调试信息。可以运行以下命令来检查文件格式: ```bash file your_executable_file readelf -h your_core_dump_file ``` 如果发现两者之间的架构或 ABI 不一致,则需要重新生成合适的目标文件并启用 `-g` 编译选项以包含调试信息[^2]。 --- #### 使用适当版本的 GDB 有时较旧版本的 GDB 对现代文件格式的支持有限。建议升级至更高版本(如 GDB 8.x 或以上)。通过源码安装最新稳定版本的方法如下: ```bash git clone https://sourceware.org/git/binutils-gdb.git cd binutils-gdb ./configure --target=aarch64-linux-gnu --prefix=/path/to/install make && make install ``` 此外,对于 macOS 用户而言,也可以考虑给 GDB 添加签名权限以便于正常工作[^4]。 --- #### 示例脚本 假设已经准备好了一个名为 `your_program` 的 aarch64 程序以及其产生的核心转储文件 `core.dump` ,那么启动调试的过程应类似于这样: ```bash /path/to/aarch64-linux-gnu-gdb ./your_program core.dump (gdb) bt full ``` 这将加载指定的核心转储文件并对崩溃现场进行反向追踪。 --- ### 总结 为了彻底解决问题,请按照以下顺序操作: 1. 确认所用 GDB 是否专为 `aarch64-linux-gnu` 设计; 2. 检查可执行文件和核心转储文件之间是否存在一致性差异; 3. 更新到更高级别的 GDB 发布版本或者修复现有实例的安全设置。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值