有时,在我们的程序运行的时候,会遇到一些崩溃问题,尤其是概率出现的时候,如果能捕获其异常,那么对于我们快速定位bug是很有帮助的

这里借用网上搜寻回来的函数,记录一下:

头文件及库:

 #include <dbghelp.h>
#pragma comment ( lib, "dbghelp.lib" )
 wstring GetPresentTime()
{
SYSTEMTIME time;
GetLocalTime(&time); TCHAR wszTime[];
swprintf_s(wszTime, _T("%04d-%02d-%02d %02d-%02d-%02d-%03d"), time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond, time.wMilliseconds); return wstring(wszTime);
} void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException)
{
// 创建Dump文件
//
HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, , NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // Dump信息
//
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE; // 写入Dump文件内容
//
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL); CloseHandle(hDumpFile);
} LONG CallBackCrashHandler(EXCEPTION_POINTERS *pException)
{
MessageBox(NULL,L"你的程序 遇到一个错误,已停止运行,请重新启动",L"错误",MB_OK); // 以当前时间为文件名
//
TCHAR szModuleDir[];
DWORD dwLength=GetModuleFileName(NULL,szModuleDir,); for(DWORD dw=dwLength-;dw>;dw--)
{
if(szModuleDir[dw]=='\\')
{
szModuleDir[dw+]=;
break;
}
} wstring strDumpFileName = szModuleDir + GetPresentTime() +_T(".dmp"); // 创建Dump文件
//
CreateDumpFile(strDumpFileName.data(), pException); return EXCEPTION_EXECUTE_HANDLER;
}

调用:

SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CallBackCrashHandler);

也许有些bug不能抓到,例如刚开始的一些初始化信息时的异常,不过大部分还是可以的

会提供小小的帮助。

最新文章

  1. Mybatis常用总结:参数,返回,执行sql,include等
  2. 2D动画的制作
  3. iOS项目groups和folder的区别(组和文件夹)
  4. 渣渣小本求职复习之路每天一博客系列——Unix&amp;Linux入门(5)
  5. ACM:统计难题 解题报告-字典树(Trie树)
  6. 深入浅出设计模式——简单工厂模式(Simple Factory)
  7. CSS3基础 02(2D /3D)
  8. Linux内核分析之计算机是如何工作的
  9. JAVA基础知识之Queue集合
  10. include指令和&lt;jsp:include&gt;标准动作
  11. 纯CSS制作冒泡提示框
  12. ubunt下的MinimalCD
  13. OTCBTC上线币币交易
  14. 8-Flink中的窗口
  15. notify.min.js
  16. 《python for data analysis》第八章,绘图与可视化
  17. STM32F103X datasheet学习笔记---USART
  18. React Natived打包报错java.io.IOException: Could not delete path &#39;...\android\support\v7&#39;解决
  19. es 加磁盘扩容
  20. Mybatis like模糊查询的写法

热门文章

  1. Java:批量插入、修改数据到数据库中的用法
  2. js 斐波那契数列(兔子问题)
  3. handler发消息的形式
  4. WebApi 通过类名获取类并实例化
  5. VM环境下,快速复制多个SQLServer实例,环境调整
  6. linux 下链接无线网络
  7. 日常总结——JSP篇(补)
  8. jQuery队列操作
  9. DataGrid获取当前行某列值
  10. linux 时间管理——概念、注意点(一)【转】