Qt应用程序的跨平台崩溃报告系统

5
我正在创建一个跨平台的Qt应用程序,希望能够有一个崩溃报告系统,当用户的计算机发生崩溃时生成崩溃报告。稍后,我应该能够查看带有所有调试信息的堆栈跟踪的崩溃报告。我已经研究了google-breakpad。
但是要使用它,似乎我需要在Windows上切换到MSVC。现在我正在Windows上使用MinGW,如果要将所有不同的库编译成MSVC,这将需要我耗费大量时间和精力。是否有办法可以使用MinGW并仍然能够使用google-breakpad?或者是否有其他可支持多平台且支持Windows上的MinGW的替代方案?
3个回答

1
我不知道除了google-breakpad之外还有哪些开放的跨平台崩溃报告系统。即使是google-breakpad也不支持MinGW,这是我所知道的,但你仍然可以从应用程序中获取回溯信息。项目Dr. Mingw提供了很棒的dll:mgwhelp.dll和exchndl.dll。使用它们需要:

  • 编译时包含调试信息,请参阅Dr. Mingw FAQ。
  • 将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来收集报告。

1

libcrashreporter-qt "旨在为Qt应用程序提供Google Breakpad崩溃报告的简单集成。"

它包含了对Breakpad的补丁,使其可以使用MinGW工具链进行构建。


0

目前Breakpad不支持MinGW,除非有人贡献端口,否则我不认为这种情况会很快改变,因为Google和Mozilla都不对MinGW有任何兴趣。我不知道还有没有其他像Breakpad一样可以跨平台工作的崩溃报告库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接