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/