1、注册自定义的UnhandledExceptionFilter,C/C++ Runtime Library下需要注意自定义handler被移除(hook kernel32.dll的SetUnhandledExceptionFilter使它返回一个空指针即可)。

PTOP_LEVEL_EXCEPTION_FILTER    v_prevUnhandledExceptionFilter;

LONG WINAPI UnhandledExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo);

v_prevUnhandledExceptionFilter = ::SetUnhandledExceptionFilter(UnhandledExceptionHandler);

LONG WINAPI UnhandledExceptionHandler(EXCEPTION_POINTERS* ExceptionInfo)
{
GenerateCrashDump(ExceptionInfo); if (v_prevUnhandledExceptionFilter != nullptr)
return v_prevUnhandledExceptionFilter(ExceptionInfo); return EXCEPTION_CONTINUE_SEARCH;
}

2、调用DbgHelp.dll的MiniDumpWriteDump函数。

void GenerateCrashDump(EXCEPTION_POINTERS* ExceptionInfo)
{
SYSTEMTIME st = { };
GetSystemTime(&st); auto path = String::Format(L"%s%04u-%02u-%02u_%02u-%02u-%02u.dmp", v_logsDir.c_str(), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
auto dumpType = (MINIDUMP_TYPE) (MiniDumpNormal | MiniDumpWithHandleData | MiniDumpWithUnloadedModules);
auto hFile = ::CreateFile(path.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE)
return; auto hProcess = ::GetCurrentProcess();
auto processId = ::GetCurrentProcessId(); MINIDUMP_EXCEPTION_INFORMATION mei = { };
mei.ThreadId = GetCurrentThreadId();
mei.ClientPointers = FALSE;
mei.ExceptionPointers = ExceptionInfo; ::MiniDumpWriteDump(hProcess, processId, hFile, dumpType, &mei, nullptr, nullptr);
::CloseHandle(hFile);
}

最新文章

  1. DateTable利用NPOI导出Excel 公共方法
  2. 无法启动调试。未安装Silverlight Developer运行时。最新运行时可以从以下地址下载: http://go.microsoft.com/fwlink/?LinkId=146060.
  3. Linux学习笔记2_mysql安装
  4. WPF 中更新界面信息
  5. POJ 1436 (线段树 区间染色) Horizontally Visible Segments
  6. BZOJ 1019 汉诺塔
  7. sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决)
  8. smarty中的修饰函数
  9. 201521123092《java程序设计》第十三周学习总结
  10. c语言环境初始化&c语言和汇编混合编程
  11. Easy methods to select MB Star, Extremely MB Star, MB SD C4, Mercedes BENZ C5 SD
  12. PHP 3种方法实现采集网站数据
  13. axios请求接口的踩坑之路
  14. 对mysql数据库字符串类型的数字排序
  15. python os.path模块常用方法详解
  16. Xshell中文乱码怎么处理?
  17. Java方法通过RestTemplate调用restful接口
  18. android 组合方式自定义控件
  19. HBuilder 获取通讯录
  20. 五子棋项目总结 JavaScript+jQuery(插件写法)+bootstrap(模态框)

热门文章

  1. MAVEN最佳实践:模块划分
  2. Objective-C语法之字符串NSString去掉前后空格或回车符(可以是NSCharacterSet类型的其它字符)
  3. Array.prototype.removeBeginWithVal(删除数组内以某值开头的字符串对象)
  4. 性能监控-TP理解
  5. vue v-if与v-show使用注意问题
  6. 小波变换——子带编码,Subband Coding
  7. 复习js
  8. Sublime的插件Color Highlighter的安装方法
  9. HDOJ 4276 The Ghost Blows Light(树形DP)
  10. [转]Struts2多个文件上传