【问题标题】:is there a way to generate a gdb-readable coredump when running programs compiled with MinGW?运行使用 MinGW 编译的程序时,有没有办法生成 gdb 可读的核心转储?
【发布时间】:2011-04-28 06:32:55
【问题描述】:

我正在尝试调试使用 MinGW 的 gcc 编译的 Windows 程序,该程序只有在 gdb outside 运行时才会出现段错误(可能是一些竞争条件......可爱。)问题是,当程序崩溃并且我没有运行 GDB,我无法获得堆栈跟踪...我可以选择在 MSVC 崩溃时打开程序,但 MSVC 无法读取 gcc 的调试符号,因此堆栈跟踪它给我也没用。

有没有办法让 Windows 创建一个核心转储,然后我可以在 MinGW 的 gdb 中打开它?或者,有没有办法获取 MSVC 的堆栈跟踪(有原始地址但没有符号)并使用 gcc 来获得人类可读的跟踪?

【问题讨论】:

    标签: c windows gdb mingw


    【解决方案1】:

    windows 不创建核心文件(在 linux 上它们由内核 iirc 转储) 您可以尝试在打开崩溃对话框的情况下使用 gdb 附加,但我怀疑它会起作用

    如果您改用 msvc,您可以在 visualstudio 中创建可调试的 minidump,但无法使用 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)

    【讨论】:

    • backtrace-mingw 看起来很完美,但我无法在我的 mingw64 系统上构建它。这里的github导出已经有问题github.com/cloudwu/backtrace-mingw
    • Windows 可能不会创建核心文件,但它可以生成转储文件(小型转储和完整转储文件。有人知道让 gdb 读取这些文件的任何方法吗?
    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2022-01-16
    • 2012-05-22
    相关资源
    最近更新 更多