Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用VS2013分析DMP文件

使用VS2013分析DMP文件

作者头像
Edison Zhou
发布于 2018-08-20 09:32:28
发布于 2018-08-20 09:32:28
1.3K00
代码可运行
举报
文章被收录于专栏:EdisonTalkEdisonTalk
运行总次数:0
代码可运行

当一个发布的.NET应用程序出现app crash,无法通过日志分析异常原因时,就需要通过分析DMP文件了,传统方式是通过WinDbg来分析DMP文件,但是WinDbg用起来不是很方便,其实VS就是一个很好的DMP文件分析工具,这里我们通过一个简单的控制台项目来分析一个DMP文件。

一、准备一个Demo项目

  (1)在VS中新建一个控制台项目,取名Sobey.NullPointerDemo,并在Main方法中写入以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class Program
    {
        static void Main(string[] args)
        {
            Person p = null;
            // NullPointerException will happen in next line
            Console.WriteLine("{0}-{1}", p.ID, p.Name);
            Console.ReadKey();
        }
    }

  其中,Person类的定义如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class Person
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

  经实验,.NET Framework版本号4.0及以上都可以。

  (2)设置为Release,并编译生成可执行文件   (3)运行.exe程序,出现crash现象,在任务管理器中生成DMP文件(在指定exe上右键菜单中选择创建转储文件)

二、分析DMP文件

  (1)到生成目录下将生成的DMP文件拷贝到Release目录下(和exe、pdb一个目录下)

  (2)双击DMP文件会直接进入VS,可以看到Summary信息

  (3)可选步骤:设置符号路径

  (4)设置关联源代码路径

  (5)一切就绪,点击“调试托管内存”

  (6)查看具体异常原因,定位异常代码位置

  找到了具体异常位置之后,就可以着手改bug了。这是一个很简单的空指针异常,但是一个简单的空指针异常却可以引起程序的崩溃,这也说明我们在编码的时候要时刻注意代码的质量,特别是鲁棒性方面,尤其是需要对NULL指针做过滤。

  最后,感谢Microsoft提供了这么优秀也这么“重量级"的IDE

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-09-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++开发中的DUMP文件:解决崩溃与性能问题的利器(全文字数2w+)
在C++开发过程中,我们常常会遇到各种问题,比如程序崩溃、性能瓶颈、内存泄漏等。这些问题可能让我们感到困惑和无助,尤其是当问题的根源隐藏在复杂的代码逻辑和运行时环境中时。这时,DUMP文件就成为了我们解决问题的得力助手。
码事漫谈
2025/04/15
1980
C++开发中的DUMP文件:解决崩溃与性能问题的利器(全文字数2w+)
.NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性、隐式类型、自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类、匿名方法以及常用的扩展方法。虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙。所以,跟着本篇的步伐,继续来围观。
Edison Zhou
2018/08/20
9340
.NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
Windows下dump文件生成与分析
生成dump文件有三种方式:任务管理器生成,windbg抓取,源码中添加dump转储代码。需要根据实际情况选择。
全栈程序员站长
2022/08/15
5.3K0
Windows下dump文件生成与分析
Windbg调试dmp文件方法
没有pdb文件,或者设置pdb目录下找不到对应的pdb文件时,崩溃堆栈列出来的信息较少。
Tomas7571
2024/06/17
1.3K0
Windbg调试dmp文件方法
.NET基础拾遗(2)面向对象的实现和异常的处理基础
  在C#中申明一个类型时,只支持单继承(即继承一个父类),但支持实现多个接口(Java也是如此)。像C++可能会支持同时继承自多个父类,但.NET的设计小组认为这样的机制会带来一些弊端,并且没有必要。
Edison Zhou
2018/08/20
6410
.NET基础拾遗(2)面向对象的实现和异常的处理基础
.NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器
开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量。但是,在开心欢乐之余,我们也不禁地对编译器内部到底为我们做了哪些事儿而感到好奇?于是,我们就借助反编译神器,去看看编译器到底做了啥事!其实本篇中很多都不算新语法,对于很多人来说可能都是接触了很久了,这里主要是针对.NET的老版本来说,是一个“相对”的新语法。
Edison Zhou
2018/08/20
8110
.NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器
获取和分析Dump的几种工具简介[通俗易懂]
最近在进一步学习support技能的时候,了解到分析Dump的重要性,经过学习,做一些笔记。
全栈程序员站长
2022/11/11
18.3K1
获取和分析Dump的几种工具简介[通俗易懂]
Windbg调试----Windbg入门
Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。
河边一枝柳
2021/08/06
2.7K0
Windbg调试----Windbg入门
[C#]使用Costura.Fody将源DLL合并到目标EXE
本文介绍了如何使用 Costura.Fody 将源 DLL 合并到目标 EXE 中,以解决在 .NET 4.6.2 环境下无法使用 Costura 的问题。通过下载并安装 Costura.Fody 工具,然后使用该工具将源 DLL 合并到目标 EXE 中,可以解决无法生成包含 Newtonsoft.Json.dll 的可执行文件的问题。
CNXY
2017/12/20
2.5K0
Entity Framework 基础知识走马观花
  (1)通过选择以XML方式打开edmx文件,我们可以可以清楚地看到,edmx模型文件本质就是一个XML文件;
Edison Zhou
2018/08/20
1.4K0
Entity Framework 基础知识走马观花
《C#图解教程》读书笔记之六:接口和转换
  假设有如下一段代码,它使用Array类的一个静态方法Sort对一个未排序的int类型数组进行排序,并输出排序后的结果。
Edison Zhou
2018/08/20
4850
《C#图解教程》读书笔记之六:接口和转换
在.NET中使用反射实现简易插件机制
  本篇是我学习反射的一个应用小场景而做的学习笔记,主要是一个小的总结,并对各个步骤的记录,以便将来回顾。
Edison Zhou
2018/08/20
3000
在.NET中使用反射实现简易插件机制
使用windbg抓取崩溃文件和分析的过程
        在软件编程中,崩溃的场景比较常见的。且说微软技术再牛X,也是会出现崩溃的场景。网上有一段Win98当着比尔盖茨蓝屏的视频非常有意思。(转载请指明出于breaksoftware的csdn博客)         我们身边的很多软件都引入了dump生成和收集机制。但是一般情况下,它们都是生成minidump。因为minidump文件相对来说很小,方面我们收集上来进行分析。但是Minidump保存了很少的信息,在一些场景下,可能不能协助我们准确快速定位问题。
方亮
2019/01/16
2.5K0
Windbg分析程序崩溃实践
本故事纯属虚构。 初入职场的小木,负责维护一个博客系统,后端采用C++编写,部署在Windows服务器上。刚刚熟悉完产品的小木,接到了后台服务的报警,服务器后端偶尔会程序崩溃。刚开始小木还有点慌张,脑子里面浮现出各种问题,这个是程序的bug吗?茫茫的代码如何寻找问题?log能看到线索吗?当冷静下来后,小木忽然想起前几天看的两篇文章<<Windbg调试----Windbg入门>>和<<Windows程序Dump收集>>,还没动手过呢,正好练习练习。
河边一枝柳
2021/08/06
1.3K0
原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用
wtf (https://github.com/0vercl0k/wtf) 是一种分布式、代码覆盖引导、可定制、基于快照的跨平台模糊器,设计用于 fuzz 在 Microsoft Windows 平台上运行的用户模式或内核模式的目标。
Seebug漏洞平台
2023/08/23
1K0
原创Paper | 基于快照的 fuzz 工具 wtf 的基础使用
设计模式的征途—7.适配器(Adapter)模式
在现实生活中,我们的笔记本电脑的工作电压大多数都是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够工作在220V的电压下工作?答案:引入一个电源适配器,俗称变压器,有了这个电源适配器,生活用电和笔记本电脑即可兼容。
Edison Zhou
2018/08/20
7000
设计模式的征途—7.适配器(Adapter)模式
Windows程序Dump收集
前面一篇写过《Windbg调试----Windbg入门》,可能不少新手会问,我在本地用Visual Studio去做调试就行了,为什么还需要那么抽象的Windbg去进行调试呢?
河边一枝柳
2021/08/06
1.1K0
Windows程序Dump收集
数据结构基础温故-1.线性表(下)
在上一篇中,我们了解了单链表与双链表,本次将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。
Edison Zhou
2018/08/20
4540
数据结构基础温故-1.线性表(下)
《你必须知道的.NET》读书笔记:从Hello World认识IL
  IL是.NET框架中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermediate Language)的代码。
Edison Zhou
2018/08/20
4760
《你必须知道的.NET》读书笔记:从Hello World认识IL
ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步
  为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area)。
Edison Zhou
2018/08/20
2.3K0
ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步
推荐阅读
相关推荐
C++开发中的DUMP文件:解决崩溃与性能问题的利器(全文字数2w+)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验