Dump文件

1. Dump文件

1. Dump文件介绍

Dump文件(Dump File),也叫转储文件,以.DMP为文件后缀。dump文件是进程在内存中的镜像文件,通过转换然后存储成以.DMP后缀的文件。dump文件根据存储时的选项不同,会生成不同大小的文件,其中记录信息也自然有所不同。

2. Dump文件分类

程序分两种,内核模式程序和用户模式程序,也即Ring0程序和Ring3程序。Dump文件是伴随着程序而生成的,所以Dump文件也同样分两种。 
1. Kernel-Mode Dump Files(内核模式Dump文件),主要是驱动程序,此文不涉及。 
2. User-Mode Dump Files(用户模式Dump文件),主要是应用程序及服务程序,此文所讲。 
用户模式Dump文件又分Full User-Mode Dumps和Minidumps。前者生成的是完整的内存快照,所以文件比较大。后者依然生成选项,生成包含不同信息的Dump文件。此文以Minidumps文件来分析调试。

3. Dump文件生成方式

  1. 通过WinDbg工具的命令 
    用WinDbg来Attach崩溃提示窗口的process,然后输入.dump /m C:\myapp.dmp命令,即可生成默认的miniDump文件(只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息)。
  2. 通过Windows任务管理器,选择指定进程,右键生成转储文件(此时的转储文件即为Full User-Mode Dumps,包含所有信息,所以文件比较大)。
  3. 通过代码在程序崩溃时生成Dump文件。
#include <DbgHelp.h>
#pragma comment(lib, "Dbghelp.lib")
// 此函数需要包含上面头文件和引入相应的库
LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* _pExcp) 
{   HANDLE hFile = CreateFile(  "d:\\Format.dmp",   GENERIC_WRITE,   0,   NULL,   CREATE_ALWAYS,   FILE_ATTRIBUTE_NORMAL,   NULL);  if (INVALID_HANDLE_VALUE == hFile)  {return EXCEPTION_CONTINUE_EXECUTION;}MINIDUMP_EXCEPTION_INFORMATION einfo = {0};einfo.ThreadId = ::GetCurrentThreadId();  einfo.ExceptionPointers = _pExcp;  einfo.ClientPointers = FALSE;  MiniDumpWriteDump(GetCurrentProcess(),   GetCurrentProcessId(),   hFile,   MiniDumpNormal,  // 指定生成默认的Minidump文件&einfo,   NULL,   NULL);  CloseHandle(hFile);   return   EXCEPTION_EXECUTE_HANDLER;   
}// 下面函数放在当前模块的入口函数处,指定ExceptionFilter替换原生的异常处理
// 即当原本要弹出崩溃提示窗口前,需要经过此函数处理,可以处理完立即退出,也可以继续
SetUnhandledExceptionFilter(ExceptionFilter); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

2. 分析Dump文件

1. 使用Visual Studio

  • 选择与生成Dump文件相同版本的VS。
  • 启动VS并打开Dump文件。
  • 必须保证生成Dump文件的程序的PDB文件和源代码相一致。
  • VS2005打开Dump文件时,直接按F5调试,代码会停在出错的地方,通过Call Stack窗口查看。
  • VS2010打开Dump文件时, 
    Dump 
    需要通过Set symbol paths设置符号文件路径,也即PDB文件路径。然后点击Debug with Native Only,代码即会暂时在出错的地方,通过Call Stack窗口查看相关信息。

2. 使用WinDbg

  • 选择相应版本的WinDbg,x86还是AMD64(也即X64,因为64桌面架构系统是AMD最新发布)。
  • File->Open Crush Dump,打开指定的Dump文件。
  • File->Symbol File Path,添加srv*D:\Symbols*http://msdl.microsoft.com/download/symbols
  • File->Symbol File Path,添加程序的PDB文件夹路径。这样可以调试系统DLL,也可以调试自有程序。
  • 然后在WinDbg命令行中输入!analyze -v,等待WinDbg分析完毕。
  • WinDbg
  • 通过上图,即可以看到代码崩溃的行数。

3. 自定义崩溃窗口

  1. 通常Windows会提供一个默认的崩溃提示窗口,或者是程序直接闪退。 
    此处输入图片的描述
  2. 重写ExceptionFilter函数,即可以重新定义崩溃窗口,用以提示用户发送相关信息给软件提供商。 
    此处输入图片的描述
  3. 示例代码 
    示例代码是Win32类型的DLL,导出接口SetCustomUnhandledExceptionFilter在Solution的启动Project的最开始调用一次即可。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web聊天室实现

后端&#xff1a; package com.jsx.chat;import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose; imp…

一对一聊天ajax实现

前端页面&#xff1a; 好友列表&#xff1a; 好友列表代码&#xff1a; <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <% page import"java.util.Random" %> <% taglib ur…

“模块计算机类型“x64”与目标计算机类型“X86”冲突解决方案

最近在编译一款开源软件的时候&#xff0c;遇到了“模块计算机类型“x64”与目标计算机类型“X86”冲突的问题&#xff0c;网上查了好多资料&#xff0c;都是配置“链接器-》高级-》目标计算机”和选择X64平台编译器&#xff0c;可是怎么试都不行&#xff0c;最后发现是“命令行…

windows稀疏文件

稀疏文件(Sparse File), 指的是文件中出现大量的0数据&#xff0c;这些数据对我们用处不大&#xff0c;但是却一样的占用我们的空间&#xff0c;针对此&#xff0c;WINNT 3.51中的NTFS文件系统对此进行了优化&#xff0c;那些无用的0字节被用一定的算法压缩起来&#xff0c;使得…

选夫婿1

Problem Description 倾国倾城的大家闺秀潘小姐要选夫婿啦&#xff01;武林中各门各派&#xff0c;武林外各大户人家&#xff0c;闻讯纷纷前来&#xff0c;强势围观。前来参与竞选的男生藏龙卧虎&#xff0c;高手云集&#xff0c;才子遍布&#xff0c;帅哥纷纭&#xff0c;更不…

Qt实现Word文档界面样式--QtitanRibbon

QtitanRibbon - Microsoft Ribbon for Nokias Qt概念的实现 QtitanRibbon组件实现了Microsoft Ribbon for Qt的概念&#xff0c;设计用于任何使用Qt开发的商业应用。这个组件和Qt一道为获取一些应用提供了一个难得的机会&#xff0c;这些应用在全球三大主要平台Windows、Linux和…

选夫婿2

Problem Description 倾国倾城的大家闺秀潘小姐要选夫婿啦&#xff01;武林中各门各派&#xff0c;武林外各大户人家&#xff0c;闻讯纷纷前来&#xff0c;强势围观。前来参与竞选的男生藏龙卧虎&#xff0c;高手云集&#xff0c;才子遍布&#xff0c;帅哥纷纭&#xff0c;更不…

轻松反编译C#的DLL

深入了解Unity&#xff0c;需要知道它内部是怎样工作的&#xff0c;API的代码长什么样&#xff0c;本文以UnityEditor.dll为例&#xff0c;演示如何轻松搞定C#库的反编译。 使用的软件是jetbrains系的doPeek&#xff0c;.NET Reflector 9.0也能做同样的工作&#xff0c;但不太推…

Qt5中文乱码解决方案

升级到Qt5.X之后&#xff0c;原先解决的Qt显示中文乱码的方法突然不适用了&#xff0c;找了很多方式来解决这个问题 第一种&#xff1a; 在公司代码里看到的方法&#xff0c;先将对应的cpp文件用windows自带的记事本打开&#xff0c;另存为UTF-8格式&#xff0c;然后在代码中&a…

带你玩转Visual Studio——带你理解多字节编码与Unicode码

转自&#xff1a;http://blog.csdn.net/luoweifu/article/details/49382969 上一篇文章带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑帮我们理解了Windows中的各种类型C/C运行时库及它的来龙去脉&#xff0c;这是C开发中特别容易误入歧途的一个地方&#xff0c;我…

如何快速高效读懂1本书

——半研墨拆书2《如何阅读1本书》 作为运营来讲&#xff0c;除了在实操中学习&#xff0c;还要扩充视角&#xff0c;开阔思维&#xff0c;建立更多解决问题的思考框架&#xff0c;这就要求我们&#xff0c;要多读书&#xff0c;还要会读书。就是说&#xff0c;我们在快速阅读的…

c#学习书籍

楼主这些年一直追随微软技术&#xff0c;也看了不少书籍&#xff0c;整理出一些个人认为不错的经典&#xff0c;推荐给各位阅读&#xff0c;以共同进步。 推荐顺序是由浅入深&#xff0c;深入浅出。 《Professional C#》&#xff0c;中文名《C#高级编程》&#xff0c;最新版本&…

查并集

The White Belt Good developers who are familiar with the entire stack know how to make life easier for those around them. 博客园首页新随笔联系订阅管理 随笔 - 159 文章 - 0 评论 - 0用于不相交集合的数据结构——查并集 不相交集合数据结构的概念和操作&#xff1…

给程序员的10条建议

1. 想清楚&#xff0c;再动手写代码 刚入行的新手&#xff0c;为了展示自己的能力&#xff0c;拿到需求迫不及待地就开始上手写代码&#xff0c;大忌&#xff01; 2. 不交流&#xff0c;就会头破血流 不爱说话和沟通&#xff0c;需求都理解错误了&#xff0c;最后做出来才发现…

传说中的800句记7000词

登录 | 注册 ZHB_McCoy的专栏 目录视图摘要视图订阅 一键管理你的代码 攒课--我的学习我做主 【hot】直播技术精选 id"cpro_u2392861_iframe" src"http://pos.baidu.com/sczm?sz300x250&rdid2392861&dc2&diu2392861&dri0&dis0&…

怎样才算得上合格的程序员

转自&#xff1a;http://blog.csdn.net/B9Q8e64lO6mm/article/details/78829370 最近同一部门另一个项目组的一位程序员被“主动离职”了&#xff0c;虽然我未曾与这个程序员共事过&#xff0c;但是听过一两次他的内部分享&#xff0c;感觉技术还是挺厉害的。后来与一个消息灵通…

c# MEF框架(一 MEF简介及简单的Demo)

转自&#xff1a;http://www.cnblogs.com/yunfeifei/p/3922668.html 在文章开始之前&#xff0c;首先简单介绍一下什么是MEF&#xff0c;MEF,全称Managed Extensibility Framework&#xff08;托管可扩展框架&#xff09;。单从名字我们不难发现&#xff1a;MEF是专门致力于解决…

c# MEF框架(二 MEF的导出(Export)和导入(Import))

转自&#xff1a;http://www.cnblogs.com/yunfeifei/p/3922891.html 上一篇学习完了MEF的基础知识&#xff0c;编写了一个简单的DEMO&#xff0c;接下来接着上篇的内容继续学习&#xff0c;如果没有看过上一篇的内容&#xff0c; 请阅读&#xff1a;http://www.cnblogs.com/yun…

c# MEF框架(三 导出类的方法和属性)

转自&#xff1a;http://www.cnblogs.com/yunfeifei/p/3927663.html 前面说完了导入和导出的几种方法&#xff0c;如果大家细心的话会注意到前面我们导出的都是类&#xff0c;那么方法和属性能不能导出呢&#xff1f;&#xff1f;&#xff1f;答案是肯定的&#xff0c;下面就来…

c# MEF框架(四 见证奇迹的时刻之实战应用)

转自 http://www.cnblogs.com/yunfeifei/p/3940075.html 前面三篇讲了MEF的基础和基本到导入导出方法&#xff0c;下面就是见证MEF真正魅力所在的时刻。如果没有看过前面的文章&#xff0c;请到我的博客首页查看。 前面我们都是在一个项目中写了一个类来测试的&#xff0c;但实…