我正在尝试调试使用 MinGW 的 gcc 编译的 Windows 程序,该程序仅在 gdb 的外部 运行时才会出现段错误(可能是某些竞争条件......可爱。)问题是,当程序崩溃并且我没有运行 GDB,我无法获得堆栈跟踪...我可以选择在崩溃时在 MSVC 中打开程序,但 MSVC 无法读取 gcc 的调试符号,因此堆栈跟踪它给我是没用的。
有没有办法让 Windows 创建一个核心转储,然后我可以在 MinGW 的 gdb 中打开它?或者,有没有办法获取 MSVC 的堆栈跟踪(它有原始地址但没有符号)并使用 gcc 来获得人类可读的跟踪?
最佳答案
windows 不创建核心文件(在 linux 上它们被内核 iirc 转储) 您可以尝试在打开崩溃对话框的情况下使用 gdb 进行附加,但我怀疑它是否会起作用
如果您改用 msvc,则可以在 visualstudio 中创建可调试的小型转储,但无法使用 gcc 创建相同的转储
google 制作了一个您可能会觉得有用的软件,但我不确定它是否可以用 gcc 生成东西
http://code.google.com/p/google-breakpad/
或者你可以将 drmingw 设置为 jit 调试器
drmingw -i
我确信在 mingw 上也可以获得类似回溯的东西,因为 mingw 编译的 llvm 能够转储跟踪
http://code.google.com/p/backtrace-mingw/
看起来更简单,但我没有测试过
使用 -g3 编译(如果可以 -O0)
关于c - 有没有办法在运行用 MinGW 编译的程序时生成 gdb 可读的核心转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5814568/