这段代码是全局捕捉崩溃信息,生成crash.dump
#include <Windows.h>
#include <DbgHelp.h>#pragma comment(lib,"Dbghelp.lib")LONG WINAPI CrashDumpHandler(_EXCEPTION_POINTERS* pException){ HANDLE hFile = CreateFileA("crash.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile != INVALID_HANDLE_VALUE) { MINIDUMP_EXCEPTION_INFORMATION expInfo; expInfo.ThreadId = GetCurrentThreadId(); expInfo.ExceptionPointers = pException; // 正确:从异常参数拿,不手动调用API expInfo.ClientPointers = FALSE; MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &expInfo, nullptr, nullptr); CloseHandle(hFile); } return EXCEPTION_EXECUTE_HANDLER;}// main函数最开头调用int main(int argc, char *argv[]){ SetUnhandledExceptionFilter(CrashDumpHandler); // 全局崩溃钩子 QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}
这短代码放在pro里面,生成pdb符号
javascript
CONFIG += debug_and_release
QMAKE_CXXFLAGS_RELEASE += /Zi
QMAKE_LFLAGS_RELEASE += /DEBUG
QMAKE_LFLAGS_RELEASE += /OPT:REF /OPT:ICF
pdb符号表记录了代码及函数,调试的时候,会直接告诉你崩溃的是哪一行,哪个函数
1.双击crash.dump,点击右侧
Debug with Navtive Only
然后就会是这个样子

把这张图交给豆包就行
