我想使用 64 位版本的 MinGW-w64 (x86_64-w64-mingw32) 提供的 GDB 调试器来调试使用 32 位版本的 MinGW-w64 (x86_64-w64-mingw32) 创建的 32 位目标。根据在 64 位环境中使用 gdb 调试 32 位应用程序 https://stackoverflow.com/questions/3931889/debug-32-bit-application-with-gdb-in-64-bit-environment,这是完全有可能的。我想这样做,因为它简化了我的设置。
但是,我从 VS Code 的调试控制台收到以下错误消息:
一堆“i386:x86-64与目标架构i386不兼容”:
1: (516) ->&"warning: `C:\\WINDOWS\\SYSTEM32\\ntdll.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.\n"
1: (516) ->=library-loaded,id="C:\\WINDOWS\\SYSTEM32\\ntdll.dll",target-name="C:\\WINDOWS\\SYSTEM32\\ntdll.dll",host-name="C:\\WINDOWS\\SYSTEM32\\ntdll.dll",symbols-loaded="0",thread-group="i1",ranges=[{from="0x30901000",to="0x30aef528"}]
1: (517) ->&"warning: `C:\\WINDOWS\\System32\\wow64.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.\n"
1: (517) ->=library-loaded,id="C:\\WINDOWS\\System32\\wow64.dll",target-name="C:\\WINDOWS\\System32\\wow64.dll",host-name="C:\\WINDOWS\\System32\\wow64.dll",symbols-loaded="0",thread-group="i1",ranges=[{from="0x2ec51000",to="0x2eca4560"}]
1: (518) ->&"warning: `C:\\WINDOWS\\System32\\wow64win.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.\n"
1: (518) ->=library-loaded,id="C:\\WINDOWS\\System32\\wow64win.dll",target-name="C:\\WINDOWS\\System32\\wow64win.dll",host-name="C:\\WINDOWS\\System32\\wow64win.dll",symbols-loaded="0",thread-group="i1",ranges=[{from="0x2f5d1000",to="0x2f64c654"}]
..........
1: (686) ->&"warning: `C:\\mingw64\\bin\\libstdc++-6.dll': Shared library architecture i386:x86-64 is not compatible with target architecture i386.\n"
1: (687) ->=library-loaded,id="C:\\mingw64\\bin\\libstdc++-6.dll",target-name="C:\\mingw64\\bin\\libstdc++-6.dll",host-name="C:\\mingw64\\bin\\libstdc++-6.dll",symbols-loaded="0",thread-group="i1",ranges=[{from="0x6fc41000",to="0x6fdfaec8"}]
1: (799) ->=library-loaded,id="C:\\mingw32\\bin\\libgcc_s_dw2-1.dll",target-name="C:\\mingw32\\bin\\libgcc_s_dw2-1.dll",host-name="C:\\mingw32\\bin\\libgcc_s_dw2-1.dll",symbols-loaded="0",thread-group="i1",ranges=[{from="0x6eb41000",to="0x6eb658f4"}]
1: (815) ->=library-unloaded,id="C:\\mingw64\\bin\\libstdc++-6.dll",target-name="C:\\mingw64\\bin\\libstdc++-6.dll",host-name="C:\\mingw64\\bin\\libstdc++-6.dll",thread-group="i1"
=library-unloaded,id="C:\\mingw64\\bin\\libstdc++-6.dll",target-name="C:\\mingw64\\bin\\libstdc++-6.dll",host-name="C:\\mingw64\\bin\\libstdc++-6.dll",thread-group="i1"
以及这个未知目标异常和未知信号消息:
gdb: unknown target exception 0x4000001f at 0x4016a6
1: (1003) ->~"\nThread "
Thread
1: (1003) ->~"1 received signal ?, Unknown signal.\n"
1 received signal ?, Unknown signal.
1: (1003) ->~"0x0009dfb8 in ?? ()\n"
0x0009dfb8 in ?? ()
1: (1003) ->*stopped,reason="signal-received",signal-name="?",signal-meaning="Unknown signal",frame={addr="0x0009dfb8",func="??",args=[],arch="i386"},thread-id="1",stopped-threads="all"
之后所有线程似乎都停止了。
我不确定哪些警告导致了问题,但是当我尝试在 VS Code 中调试时,我的 hello world 程序只是挂起,不向控制台输出任何内容,也没有命中任何断点。
我能够使用 64 位调试器和 64 位目标成功进行调试。 32 位可能会出现什么问题?
我的MinGW版本是7.0.0,对应的GCC版本是10.1.0(从http://winlibs.com/ http://winlibs.com/)