Windows下的Dump文件
来源:互联网 发布:中科大软件学院信息化 编辑:程序博客网 时间:2024/05/16 12:10
一、 生成Dump文件方式
1.1任务管理器
在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程。右键—>创建转储文件。
此时会在默认的目录下创建出一个dump文件。
可以看出,此种方法只适用于程序崩溃但没有立即自行退出的情况。倘若程序故障后自行退出,则此方法就难以应用。不过,我们可以在注册表中添加如下信息已确保系统在程序崩溃后自行保存一个dump文件:
在注册表中找到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\WindowsError Reporting\LocalDumps
添加项如下图:
其中DumpType代表的含义是:
0 = Create a custom dump
1 = Mini dump
2 = Full dump
如此一来,一旦程序崩溃,系统会在C:\CrashDump下生成一个dump文件。
1.2WinDbg抓取
程序运行崩溃后,先不关闭程序,将WinDbg附加到改进程上。
执行命令:.dump –ma Test.dmp ,则会产生一个Test.dmp的转储文件。
1.3程序中加入存储Dump的代码
通过SetUnhandledExceptionFilter设置捕获dump的入口,然后通过MiniDumpWriteDump生成dump文件。
如下程序在程序异常时会自行转储一个名为Test.dmp的dump文件。
#include<Windows.h>#include<DbgHelp.h>#pragma comment(lib,"DbgHelp.lib")// 创建Dump文件void CreateDumpFile(LPCWSTR lpstrDumpFilePathName, EXCEPTION_POINTERS *pException){HANDLE hDumpFile = CreateFile(lpstrDumpFilePathName, GENERIC_WRITE, 0, 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);}// 处理Unhandled Exception的回调函数LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException){CreateDumpFile(L"Test.dmp",pException);return EXCEPTION_EXECUTE_HANDLER;}void fun(int *p){p[0]=0;}int main(int argc, char * argv[]){//注册异常处理函数SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler); fun(NULL);return 0;}
二、调试Dump文件
2.1.VS调试
用VS打开dmp文件。测试时 dmp文件时本地产生的,因此VS会依据dmp文件自行找到exe,pdb和源代码的路径。因此直接点击调试,程序会出错代码行中断。但若dmp文件是exe在另一台机器上产生的,则我们最好把exe,pdb,dmp放到同一文件夹下,必须保证pdb与出问题的exe是同一时间生成的,用VS打开dmp文件后还需要设置符号表文件路径和源代码路径:
(1) 当把pdb文件与dmp文件放入同一目录下时,就不需设置其路径,否则需要设置
工具->选项->调试->符号:
(2)还需设置源代码路径:
属性->调试源代码:
这样点击“使用仅限本机进行调试”,即可在出错代码行中断:
2.2 WinDbg调试
(1)设置pdb路径:File ->Symbol File Path
(2)设置exe路径:File -> Image File Path
(3)设置源代码路径:File -> Source File Path(指sln所在目录)
(4)打开dmp文件:File ->Open Crash Dump
(5)执行命令 !analyze –v
由分析结果可以看出,在main.cpp第7行出错,错误类型:NULL_POINTER_WRITE.
- Windows下的Dump文件
- Windows下如何手工抓取dump文件
- windows 平台下 生成Dump文件例子
- windows下生成core dump文件
- windows下生成core dump文件
- Windows下生成dump文件方法
- Windows下dump文件生成与分析
- linux/windows下利用JDK自带的工具获取thread dump文件和heap dump文件
- Windows下获取Dump文件以及进程下各线程调用栈的方法总结
- Windows下获取Dump文件以及进程下各线程调用栈的方法总结
- 让Windows下的应用程序在崩溃的时候写dump文件的代码
- windows下捕获dump
- windows下捕获dump
- windows下捕获dump
- windows下捕获dump
- windows下捕获dump
- windows下捕获dump
- windows下捕获dump
- 杭电acm 4142Triangle(小学生题,判断三角形)
- Red Hat Enterprise Linu 7 3.1.13关机命令
- GCD and LCM
- Weblogic部署maven web项目
- shiro+redis实现session共享<2>
- Windows下的Dump文件
- Android系统级服务:DevicePolicyManager
- 总结问题解决
- HDU
- Matconvnet中imagenet的getImageStart.m代码中求协方差的代码及均值(1,3)
- 【排列组合】UVALive
- 百练2738:实数加法题解
- day_10_多态性、类型信息
- PYTHON 一些基础面试题目总结