Windows下的Dump文件
一、 生成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文件的三种方式
文章目录 前言 一.什么是dump文件? 概述 dump分类 内核模式Dump 用户模式Dump 二.dump生成方式 实现方法 方法一:修改注册表 参数说明 方法二:生动创建转储文件 方法三:通过代 ...
- IBM内存分析工具JCA在windows环境下打开dump文件报错问题:Cannot find any thread dumps
问题描述:IBM内存分析工具JCA在windows环境下打开dump文件报错问题:Cannot find any thread dumps 原因:dump文件编码格式问题 解决:修改dump.txt文 ...
- windows下捕获dump
一般要捕获异常只需要两个函数:SetUnhandledExceptionFilter截获异常:MiniDumpWriteDump写dump文件.但是由于CRT函数可能会在内部调用SetUnhandle ...
- Windows 下目录及文件向Linux同步
本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...
- windows下批处理删除文件及注册表项
1.windows下批处理删除注册表项 假如我要清除WinRAR的历史记录,可以新建个批处理文件, 然后在里面加入如下文字: reg delete HKEY_CURRENT_USER/Software ...
- windows下的.DLL文件
DLL(Dynamic Link Library)文件为动态链接库文件,又称为"应用程序拓展",是软件文件类型.在windows中,许多应用程序并不是一个完整的可执行文件,它们被分 ...
- windows下批处理删除文件夹、删除文件、if exist用法
windows下批处理删除文件夹.删除文件.if exist用法 开发中用到Window批处理del.rd.if exist,总结用法便于后续使用. windows下批处理删除文件: * 使用del指 ...
- 在windows下看linux文件-Explore2fs(转)
在windows下看linux文件-Explore2fs(转)[@more@]Explore2fs 1.00 pre 6b 你曾经在Linux操作系统下载了很多文件,但是当你重新开启在Windows9 ...
- 系统运维系列 之在Windows下可以查看文件夹大小的工具TreeSize Free
给大家推荐一个在Windows下可以查看文件夹大小的工具TreeSize Free. 下载链接: https://customers.jam-software.de/downloadTrial.php ...
最新文章
- 《Java编程思想》第四版读书笔记 第十四章 类型信息
- 关于上个Flex-Jsp-DB例子中Flex和Jsp传递中文参数问题的解决方法!(Tomcat服务器)...
- KiFastCallEntry() 机制分析
- php 打开报错,php模式下 运行start.php 报错
- 指针数组 与 数组指针 的分析
- PAT甲级1129 Recommendation System:[C++题解]统计前k个商品
- 【转载】Few-shot learning(少样本学习)和 Meta-learning(元学习)概述
- 成本直降50%,下一代网关震撼发布
- 推荐 7 个 Vue2、Vue3 源码解密分析的开源项目
- linux命令运行中,输入命令,如果输入错误,怎么删除?
- 整合Hibernate3.x
- 图卷积 节点分类_在节点分类任务上训练图卷积网络
- java多线程按行读取文件_“java”中多线程按行读取txt且每个线程读的内容不能重复,这么求“demo”?...
- python数据科学库_Python数据科学库
- 放置江湖html5源码,「放置江湖」——经典文字类放置武侠手游
- 不收费的数据恢复软件推荐
- 用Flash CS4打开fla文件提示“意外的格式”的解决方法
- 《时代周刊》:投资者为何争相购买虚拟土地?
- 推荐一款有趣的APP-种子习惯
- 太原理工大学系统分析与设计实验报告实验室设备_“艺术之光”绽放太原理工大学首届本科生专业节...