我有一个C ++应用程序,不知何故,gdb(我正在使用mingw-w64版本)似乎总是对主要可执行文件的加载地址感到困惑。如果我尝试在某个函数或文件+行号上插入断点,gdb会尝试在错误的地址处执行该断点,并且断点不起作用。它也不能产生回溯。通过添加printf
显示某个函数的地址,并将其与一个gdb与break someFunction
(或print &someFunction
)一起使用,我可以看到它使用的地址是错误的。另一方面,对于位于DLL中的函数,gdb可以成功插入断点或产生回溯(至少在达到可执行文件中的函数之前)。
我不知道为什么会这样,但无论如何能够使用调试器会很好。假设可执行代码段的地址错误,我是否可以通过某种方式将其调整到正确的位置?我尝试过的gdb版本是7.9和8.0.1。