在x64机器上使用x64 GDB调试32位C程序失败,如何解决?
我碰到过好多次这类TDM-GCC架构适配的问题,你的情况是64位GDB没法正确调试32位程序,加上Windows Wow64层的库干扰,才会出现那些架构不兼容警告和未知信号错误。下面是几个靠谱的解决办法:
安装32位版本的GDB组件
你用的tdm-64-1套件默认带的是64位GDB,对32位程序的支持很有限。最简单的办法是重新运行TDM-GCC的安装程序,选择添加32位调试工具组件,或者直接下载单独的32位GDB二进制文件替换掉现有64位GDB。这样GDB就能原生识别32位程序了。强制GDB使用i386架构
如果你不想换GDB,可以试试启动GDB后先强制指定目标架构,再加载程序。虽然没法解决系统Wow64库的警告,但大概率能正常调试:gdb test.exe (gdb) set architecture i386 (gdb) start切换到纯32位MinGW-w64工具链
TDM-GCC基于MinGW-w64,你可以直接下载MinGW-w64的i686(32位)版本工具链。配置好环境变量后,用它的gcc编译(同样加-m32参数),配套的GDB会完美支持32位程序调试,不会再出现架构不兼容的问题。确认编译参数正确
先检查你编译32位程序时有没有加-m32参数,这个参数是64位TDM-GCC生成纯32位程序的关键:gcc -m32 -g test.c -o test.exe如果没加这个参数,可能生成的是混合架构的文件,导致GDB识别混乱。
另外,你看到的那些关于ntdll.dll、wow64.dll的警告是正常的——这些是Windows的64位Wow64兼容库,用来在x64系统上跑32位程序,但64位GDB没法解析它们的符号,不过只要GDB本身是32位的,这些警告不会影响你调试自己的32位程序。
内容的提问来源于stack exchange,提问作者eLeCtrOssSnake

