在我们编写代码的过程中,避免不了内存泄漏问题和程序崩溃问题,常常为寻找程序崩溃点而烦恼。这篇文章主要为解决程序崩溃而写。以下是代码头文件getDump.h。
#pragma once
#include <DbgHelp.h>
#pragma comment(lib, "DbgHelp.lib")
int CreateDump(PEXCEPTION_POINTERS pExcrption) {
std::cout << "crash!!!" << std::endl;
SYSTEMTIME localTime;
GetLocalTime(&localTime);
TCHAR fileName[MAX_PATH] = {0};
wsprintf(fileName, L"%04d-%02d-%02d-%02d-%02d-%02d", localTime.wYear, localTime.wMonth, localTime.wDay, localTime.wHour, localTime.wMinute, localTime.wSecond);
HANDLE dumpFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pExcrption;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), dumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(dumpFile);
return 0;
}
下面是使用示例:
#include <iostream>
#include "getDump.h"
int main() {
/* 启用getDump */
SetUnhandledExceptionFilter(ExceptionFilter);
/* 检测内存泄漏 */
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int* p = nullptr; //new int(100);
std::cout << *p << std::endl;
delete p; //释放或不释放 看检测结果
return 0;
}