6

我正在尝试将 Google Breakpad 集成到 Windows Qt 项目中。

当我用 MinGW(不是 w64)编译它时,Breakpad 按预期工作,并在应用程序崩溃时生成一个 Minidump 文件。

但是,当我使用 MinGW-w64 编译相同的代码时,应用程序会在没有 Minidump 文件的情况下崩溃。

这个问题可以通过一个简单的测试程序重现:

#include "breakpad/client/windows/handler/exception_handler.h"
#include "breakpad/client/windows/sender/crash_report_sender.h"

void test()
{
    // install the exception handler
    std::wstring prod(L"some prod");
    std::wstring ver(L"some ver");
    std::wstring subver(L"some subver");
    static google_breakpad::CustomInfoEntry custom_entries[] = {
        google_breakpad::CustomInfoEntry(L"prod", prod.c_str()),
        google_breakpad::CustomInfoEntry(L"ver", ver.c_str()),
        google_breakpad::CustomInfoEntry(L"subver", subver.c_str()),
    };
    static google_breakpad::CustomClientInfo custom_info = {custom_entries, 3};

    std::wstring path(L"some/path/to/dump/file");
    auto handler = new google_breakpad::ExceptionHandler(path, nullptr, nullptr, nullptr, google_breakpad::ExceptionHandler::HANDLER_ALL, MiniDumpNormal, (const wchar_t *)nullptr, &custom_info);

    // feed crash
    *(int*)0x1 = 1; 
}

int main()
{
    test();
    return 0;
}

代码与 Breakpad 源代码树一起编译(不是作为二进制库)

似乎没有调用异常处理程序。如果我将回调函数注册到google_breakpad::ExceptionHandler.

那么为什么会发生呢?是否可以将 Breakpad 集成到 MinGW-w64 编译的项目中?

4

0 回答 0