一、dump文件
DMP是windows系统中的错误转储文件。可以通过dump文件查看
windows环境下,有两种方法可以生成dump文件:在任务管理器里面手动生成;在程序中挂一个钩子,检测异常自动生成。
1、在任务管理器手动生成
2、在程序中挂钩子回调函数,系统进入异常,自动生成
1)在系统启动时,注册钩子函数:SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
2)定义ApplicationCrashHandler钩子函数
static LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
//And output crash information
EXCEPTION_RECORD *record = pException->ExceptionRecord;
QString errCode(QString::number(record->ExceptionCode, 16));
QString errAddr(QString::number((qulonglong)record->ExceptionAddress, 16));
QString errFlag(QString::number(record->ExceptionFlags, 16));
QString errPara(QString::number(record->NumberParameters, 16));
qDebug()<<"errCode: "<<errCode;
qDebug()<<"errAddr: "<<errAddr;
qDebug()<<"errFlag: "<<errFlag;
qDebug()<<"errPara: "<<errPara;
//Create the dump file
QString strFile = QString("crash")+QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss")
+QString("-%1").arg(VER_REVISION)+QString(".dmp");
HANDLE hDumpFile = CreateFile((LPCWSTR)strFile.utf16(),
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hDumpFile != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(hDumpFile);
}
return EXCEPTION_EXECUTE_HANDLER;
}
二、pdb文件生成配置