
先安装windbg_v10.0.18362.1.msi
main.cpp程序入口中添加以下代码
//#include <windows.h>
//#include <DbgHelp.h>
//#pragma comment(lib,"DbgHelp.lib")
程式异常捕获
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
//创建 Dump 文件
HANDLE hDumpFile = CreateFile(L"D:\\crash.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDumpFile != INVALID_HANDLE_VALUE)
{
//Dump信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
//写入Dump文件内容
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
}
//这里弹出一个错误对话框并退出程序
QMessageBox::critical(NULL, "程序崩溃", "抱歉,请联系程序猿解决!");
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置异常拦截
//注冊异常捕获函数
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
a.installNativeEventFilter(new MyFilter);
mainwindow w;
w.show();
return a.exec();
}
添加完以上代码以后,当程序崩溃时会在D:\\crash.dmp生成这个dmp文件
打开Windbg软件

点击【File】按钮,先打开PDB文件地址(Symbol File Path),然后打开源码地址(Source File Path),最后打开dbg文件地址(Open Crash Dump)


再点击这个!analvze -v进行分析,会自动定位到错误位置
2万+

被折叠的 条评论
为什么被折叠?



