Qt C ++ Трассировка стека необработанных исключений

Я пытаюсь найти способ получить трассировку стека развернутого приложения C ++ в случае сбоя. Я попробовал несколько подходов, и я думаю, что моя проблема связана со стеком после возникновения исключения.

Я создал тестовое приложение в Qt. Вот код

void miniDumpFunc()
{
    MiniDump dump;
    dump.Create(L"C:\\dmp\\dmp.dmp");
}

void anotherFunc()
{
    miniDumpFunc();
}

LONG WINAPI OurCrashHandler(EXCEPTION_POINTERS * /*ExceptionInfo*/)
{
    miniDumpFunc();

    return EXCEPTION_EXECUTE_HANDLER;
}

void badFunc()
{
    int *myNull = NULL;
    *myNull = 42;
}

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    ::SetUnhandledExceptionFilter(OurCrashHandler);

    anotherFunc();

    return app.exec();
}

Если я вызываю anotherFunc () и затем просматриваю трассировку стека в WinDbg, я получаю следующий стек.

Я думаю, что здесь происходит некоторая внутренняя отделка, но это выглядит правильно.

Если я вызываю badFunc (), я получаю это.

Трассировка стека начинается с UnhandledExceptionFilter. Кажется, что стек запутался из-за исключения.

Вот где я получил код для создания мини-дампов.http://blog.aaronballman.com/2011/05/generating-a-minidump/

Ответы на вопрос(1)

Ваш ответ на вопрос