#include
#include
#include
#include
#pragma comment( lib, "Dbghelp.lib" )
using namespace std;
void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS* pException)
{
// 创建Dump文件
HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// Dump信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException; // 异常信息
dumpInfo.ThreadId = GetCurrentThreadId(); // 引发异常的线程id
dumpInfo.ClientPointers = TRUE; // 则异常指针位于客户机或崩溃的进程的地址空间中
// 写入Dump文件内容
MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hDumpFile,
MiniDumpNormal, // 只包含捕获进程中所有现有线程的堆栈跟踪所需的信息
&dumpInfo, // 异常信息
NULL, // minidump文件中不包含用户定义的信息
NULL // 不指定 minidump 信息的回调
);
CloseHandle(hDumpFile);
}
LONG CrashHandler(EXCEPTION_POINTERS* pException)
{
MessageBox(NULL, L"崩溃了", L"Lyshark", MB_OK);
wstring strDumpFileName = L"C:\\lyshark.dmp";
CreateDumpFile(strDumpFileName.data(), pException);
return EXCEPTION_EXECUTE_HANDLER;
}
int main()
{
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashHandler);
int i = 13;
int j = 0;
int m = i / j;
getchar();
return 0;
}