目录

一 、dmp的生成

1、未处理异常过滤器接口 SetUnhandledExceptionFilter

2、DMP 文件生成

1)、写DMP文件

2)、异常崩溃时,创建崩溃文件写入

二、调试dmp文件


一 、dmp的生成

DUMP 非常有助于调试问题,尤其是莫名崩溃问题,所以很多程序中都引入DUMP生成机制

1、未处理异常过滤器接口 SetUnhandledExceptionFilter

使用的API如下: SetUnhandledExceptionFilter

LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter([in] LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter
);

简单的示例如下:

  #include   <windows.h>   long   __stdcall   callback(_EXCEPTION_POINTERS*   excp)   {   MessageBox(0,L"Error",L"error",MB_OK);   return   EXCEPTION_EXECUTE_HANDLER;   }int   main(int   argc,char*   argv[])   {   SetUnhandledExceptionFilter(callback);   int j = 0;int i = 2 / j;  //崩溃return   0;   }

2、DMP 文件生成

上述只是简单的知道崩溃了,但是崩溃的详细信息并没有记录下来,下面是如何通过DUMP文件记录崩溃信息的过程

1)、写DMP文件

 HANDLE h = ::CreateFile(path.c_str(), GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);MINIDUMP_EXCEPTION_INFORMATION info;info.ThreadId = ::GetCurrentThreadId();info.ExceptionPointers = exp;info.ClientPointers = NULL;MINIDUMP_CALLBACK_INFORMATION mci; mci.CallbackRoutine = (MINIDUMP_CALLBACK_ROUTINE)MyMiniDumpCallback; mci.CallbackParam = 0; MINIDUMP_TYPE mdt = (MINIDUMP_TYPE)(MiniDumpWithIndirectlyReferencedMemory | MiniDumpScanMemory); MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), h, mdt, &info, NULL, &mci);::CloseHandle(h);
}

2)、异常崩溃时,创建崩溃文件写入

LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* exp)
{nbase::Time::TimeStruct qt = nbase::Time::Now().ToTimeStruct(true);std::wstring file = nbase::StringPrintf(L"intlive_%04d%02d%02d_%02d%02d%02d_gidVer_%s_%d.dmp", qt.year_, qt.month_, qt.day_of_month_, qt.hour_, qt.minute_, qt.second_, s2ws(g_gid).c_str(),g_nBuild);std::wstring dir = GetAppPath();dir.append(file);WriteDump(exp, dir);return EXCEPTION_EXECUTE_HANDLER;
}

在程序入口函数中,添加崩溃异常处理函数

    ::SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);

二、调试dmp文件

用户运行时发生了崩溃,这时候我们要拿到这个dmp文件,至于怎么拿不是这篇文章的重点,这里讨论的是拿到dmp后,怎么分析。

需要的文件:

产生崩溃的程序、及对应的pdb、dmp文件

而且,最好在编译这个程序的那台电脑上调试,如何在别的电脑上,可能还需要拷贝部分Cpp源文件。

pdb、dmp调试文件相关推荐

  1. VC++ 利用PDB和dump文件定位问题并进行调试

    转载:https://blog.csdn.net/zfs_kuai/article/details/43646665 转载:https://blog.csdn.net/i_chaoren/articl ...

  2. mysql .pdb是什么文件_超详细讲解如何使用 pdb 在服务器上调试代码

    Pycharm 的图形化界面虽然好用,但是在某些场景中,是无法使用的.而 Python 本身已经给我们提供了一个调试神器 -- pdb,可能你还不知道它,为了讲解这个神器,我写了这篇文章来帮助你轻松的 ...

  3. Qt 杂记 —— Qt安装并配置调试文件,添加源码调试pdb文件

    文章目录 Qt 杂记 -- Qt安装并配置调试文件,添加源码调试pdb文件 一.安装QT及QTCreator 二.在VS中使用QT 个人格言 Qt 杂记 -- Qt安装并配置调试文件,添加源码调试pd ...

  4. [转]PDB——Python调试利器详解

    python 2.7 pdb官方文档:https://docs.python.org/2.7/library/pdb.html pdb是ptyhon内置的一个调试库,是调试python代码的好帮手,本 ...

  5. pdb—Python调试器

    pdb-Python调试器 在python 3.8文档 Python 常用指引中已经详细介绍了pdb模块,此处为引用官方文档 该模块pdb为Python程序定义了一个交互式源代码调试器.它支持在源代码 ...

  6. 使用 pdb 进行调试

    原文章 https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ 使用 pdb 进行调试 pdb 是 python 自带的一个包 ...

  7. 什么是pdb,idb文件,.clw文件、.ncb文件和.aps文件

    什么是pdb,idb文件,.clw文件..ncb文件和.aps文件 LINK       uses     a     PDB     to     hold     debugging     in ...

  8. python pdb 基础调试

    当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文:(pdb 命令调试) 参考:http://docs.python.org/library/pdb.html 和 (pdb)help ...

  9. pdb+ipdb 调试 Python代码

    pdb+ipdb 调试 Python代码 pdb 和 ipdb 的主要作用是用于 Python 程序的单步调试,Python 的调试可参考链接. ipdb exports functions to a ...

最新文章

  1. 更改VMWare 虚拟机的硬件设置
  2. python 多进程管道 消息式通信
  3. SQL性能优化-查询条件与字段分开执行,union代替in与or,存储过程代替union
  4. python中random中uniform怎么用_Python中的random.uniform()函数教程与实例解析
  5. aws dynamodb_使用适用于Java 2的AWS开发工具包的AWS DynamoDB版本字段
  6. python pywinauto 单击鼠标_Python释放你的双手去成就梦想之自动化控制鼠标键盘
  7. 超详细的Java面试题总结(一)之Java基础知识篇
  8. 学了阿里P8级架构师的7+1+1落地项目,转疯了!
  9. 大型高并发与高可用的三层缓存架构总结
  10. ASP.NET MVC2用户界面的巨大改变
  11. 【Linux开发】linux设备驱动归纳总结(四):3.抢占和上下文切换
  12. flink sql运用入门
  13. Python Day05
  14. php重构求圆柱圆锥的体积,六年级数学下册2.8 圆锥的体积教案 (新版)苏教版...
  15. 恒指赵鑫:8.7恒指德指喊单记录与晚盘前瞻
  16. php 检测链接,PHP检测链接是否存在的代码实例分享
  17. 帝国cms php超时,帝国CMS后台登录超时、登录错误5次限制的解决办法
  18. 学计算机高中选那三科,高中选哪三科最吃香
  19. dmz和端口映射_主机映射和端口映射 ip映射和端口映射区别
  20. JAVA ActiveMQ 详解

热门文章

  1. Cris 的 Python 数据分析笔记 06:Pandas 常见的数据预处理
  2. 脑壳疼!到底该不该裸辞?
  3. 二叉排序树查找成功和不成功的平均查找长度
  4. 深入分析Win32k系统调用过滤机制
  5. 有了这款软件,轻松实现报表制作
  6. 记事本(notepad.exe)编码的解惑
  7. Win10 清除 PowerShell 历史记录
  8. jsoup爬取驾考题库
  9. 实现鼠标手写板(.Net)
  10. 解决“Liquibase: Waiting for changelog lock”数据库死锁问题