5

我正在创建一个多平台 Qt 应用程序,我希望崩溃报告系统在用户计算机发生崩溃时生成崩溃报告。稍后,我应该能够查看堆栈跟踪以及崩溃报告中的所有调试信息。我看过google-breakpad。

但是要使用它,我似乎需要转向 Windows 的 MSVC。现在我在 Windows 上使用 MinGW,我需要花费大量时间和精力来使用 MSVC 编译所有不同的库。有什么方法可以使用 MinGW 并且仍然可以使用 google-breakpad?或者是否有其他可以在 Windows 上运行多平台并支持 mingw 的替代方案?

4

3 回答 3

1

libcrashreporter-qt “应该提供将 Google Breakpad 崩溃报告轻松集成到 Qt 应用程序中”。

它包含 breakpad 的补丁,使其可以使用 MinGW 工具链构建。

于 2015-03-14T22:45:04.570 回答
1

除了google-breakpad,我不知道任何开放的多平台崩溃报告系统。甚至 google-breakpad 也不支持 MinGW,据我所知,您仍然可以从您的应用程序中获取回溯。项目Dr. Mingw提供了很棒的 dll:mgwhelp.dll 和 exchndl.dll。使用您需要:

  • 使用调试信息进行编译。请参阅 Mingw 博士的常见问题解答。
  • 在您的应用程序二进制文件中包含 mgwhelp.dll 和 exchndl.dll
  • 并在应用程序启动时通过显式调用 LoadLibrary("exchndl.dll") 加载 exchndl.dll

例如像这样:

QFile drmingw("exchndl.dll");
if(drmingw.exists())
{// If don't want create reports just delete exchndl.dll from installer
    LoadLibrary(L"exchndl.dll");
}

崩溃后,您将在二进制所在的同一目录中找到带有回溯的文件binary_name.RPT 。

我还能做什么?

  • 在发布模式下剥离调试符号。
win32:!win32-msvc*{
    # Strip debug symbols.
    QMAKE_POST_LINK += objcopy --only-keep-debug bin/${TARGET} bin/${TARGET}.dbg &&
    QMAKE_POST_LINK += objcopy --strip-debug bin/${TARGET} &&
    QMAKE_POST_LINK += objcopy --add-gnu-debuglink="bin/${TARGET}.dbg" bin/${TARGET}
}
  • 每次运行检查 .RPT 文件是否存在并发送或保存在报告目录中。例如,我使用 gist 来收集报告。
于 2014-11-16T19:44:21.197 回答
0

Breakpad 目前不支持 MinGW。我预计这种情况不会很快改变,除非有人贡献了这个端口,因为谷歌和 Mozilla 都对 MinGW 没有任何兴趣。我不知道有任何其他像 Breakpad 那样以跨平台方式工作的崩溃报告库。

于 2013-04-11T12:08:37.953 回答