c - 有没有办法在运行用 MinGW 编译的程序时生成 gdb 可读的核心转储?

标签 c windows gdb mingw

我正在尝试调试使用 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/

相关文章:

java - 当客户端调用 html 或 jsp 页面时,是否可以选择登录凭据的窗口

gdb - 跟踪点在 gdb 中不起作用,它显示 "Trace can only be run on remote targets"

gdb - 'inferior' 在术语 'inferior debugger' 中意味着什么?

c - 警告 : format '%ld' expects argument of type 'long int' , 但参数 2 的类型为 'int'

c - 接收多条消息的socket编程C

C、为什么printf在个位数长后添加 "D"?

windows - 如何停止 Windows 上的 nginx?

c - 将窗口大小调整为 X 个字符(不是像素)

JavaScript setInterval() 不适用于 Windows CE 设备

c++ - 已修复 : C++ server/client program: "Connection refused"