1.vs工程属性vs Release版本中设置。如下图所示。
2.vs测试代码编写。
#include <windows.h>
#include <DbgHelp.h>
#pragma comment(lib,"Dbghelp.lib")
long __stdcall CrashInfocallback(_EXCEPTION_POINTERS* pexcp)
{
// 创建dmp文件
HANDLE hDumpFile = ::CreateFile(
L"Memory.DMP",
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hDumpFile != INVALID_HANDLE_VALUE)
{
// dmp文件信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pexcp;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
// 写入dmp文件内容
::MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hDumpFile,
MiniDumpNormal,
&dumpInfo,
NULL,
NULL
);
}
return 0;
}
void test_dump()
{
char* ch = "abc";
ch[5] = 'g';
}
void main()
{
::SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashInfocallback);
test_dump();
return;
}
3.Dump文件的使用
(1)保证exe、pdb、dump文件在同一目录下。如下图。
(2)使用vs打开dump文件。
(3)点击本地调试,如下图所示。
出现如下结果,定位到源代码的出错行,还可以查看当时的变量的值。