pdb、dmp调试文件
目录
一 、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调试文件相关推荐
- VC++ 利用PDB和dump文件定位问题并进行调试
转载:https://blog.csdn.net/zfs_kuai/article/details/43646665 转载:https://blog.csdn.net/i_chaoren/articl ...
- mysql .pdb是什么文件_超详细讲解如何使用 pdb 在服务器上调试代码
Pycharm 的图形化界面虽然好用,但是在某些场景中,是无法使用的.而 Python 本身已经给我们提供了一个调试神器 -- pdb,可能你还不知道它,为了讲解这个神器,我写了这篇文章来帮助你轻松的 ...
- Qt 杂记 —— Qt安装并配置调试文件,添加源码调试pdb文件
文章目录 Qt 杂记 -- Qt安装并配置调试文件,添加源码调试pdb文件 一.安装QT及QTCreator 二.在VS中使用QT 个人格言 Qt 杂记 -- Qt安装并配置调试文件,添加源码调试pd ...
- [转]PDB——Python调试利器详解
python 2.7 pdb官方文档:https://docs.python.org/2.7/library/pdb.html pdb是ptyhon内置的一个调试库,是调试python代码的好帮手,本 ...
- pdb—Python调试器
pdb-Python调试器 在python 3.8文档 Python 常用指引中已经详细介绍了pdb模块,此处为引用官方文档 该模块pdb为Python程序定义了一个交互式源代码调试器.它支持在源代码 ...
- 使用 pdb 进行调试
原文章 https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ 使用 pdb 进行调试 pdb 是 python 自带的一个包 ...
- 什么是pdb,idb文件,.clw文件、.ncb文件和.aps文件
什么是pdb,idb文件,.clw文件..ncb文件和.aps文件 LINK uses a PDB to hold debugging in ...
- python pdb 基础调试
当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文:(pdb 命令调试) 参考:http://docs.python.org/library/pdb.html 和 (pdb)help ...
- pdb+ipdb 调试 Python代码
pdb+ipdb 调试 Python代码 pdb 和 ipdb 的主要作用是用于 Python 程序的单步调试,Python 的调试可参考链接. ipdb exports functions to a ...
最新文章
- 更改VMWare 虚拟机的硬件设置
- python 多进程管道 消息式通信
- SQL性能优化-查询条件与字段分开执行,union代替in与or,存储过程代替union
- python中random中uniform怎么用_Python中的random.uniform()函数教程与实例解析
- aws dynamodb_使用适用于Java 2的AWS开发工具包的AWS DynamoDB版本字段
- python pywinauto 单击鼠标_Python释放你的双手去成就梦想之自动化控制鼠标键盘
- 超详细的Java面试题总结(一)之Java基础知识篇
- 学了阿里P8级架构师的7+1+1落地项目,转疯了!
- 大型高并发与高可用的三层缓存架构总结
- ASP.NET MVC2用户界面的巨大改变
- 【Linux开发】linux设备驱动归纳总结(四):3.抢占和上下文切换
- flink sql运用入门
- Python Day05
- php重构求圆柱圆锥的体积,六年级数学下册2.8 圆锥的体积教案 (新版)苏教版...
- 恒指赵鑫:8.7恒指德指喊单记录与晚盘前瞻
- php 检测链接,PHP检测链接是否存在的代码实例分享
- 帝国cms php超时,帝国CMS后台登录超时、登录错误5次限制的解决办法
- 学计算机高中选那三科,高中选哪三科最吃香
- dmz和端口映射_主机映射和端口映射 ip映射和端口映射区别
- JAVA ActiveMQ 详解