面向。net程序员的转储分析

<强>背景

<强> 转储文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到转储文件中。在Windows系统上,转储文件分为内核转储和用户态转储两种。前者一般用来分析内核相关的问题,比如驱动程序,后者一般用来分析用户态程序的问题。

一般的程序员可能接触不到转储文件,反而是运维会用的多一些。因为很多场景下,在线下的单元测试或者性能测试中由于测试用例的不充分或者生产与测试环境的硬件以及pv量级的不同等等情况导致问题暴露不出,而在生产环境中又没有足够的日志或者堆栈信息来指向问题产生的原因。这个时候转储文件的分析就显得很有作用。

正文分3节抓取转储以及转储的手动和自动分析。对于初学者自动分析转储是很方便的一种渠道。

<人力资源/>

<强>一。抓取转储

1。最简单的方法通过任务管理器

面向。净程序员的转储分析 面向。净程序员的转储分析

面向。净程序员的转储分析

2。通过debugdiag

debugdiag是一个微软提供的转储抓取和分析工具。可以建立各种规则在不同的条件下抓取转储,同时具有强大的转储分析功能。

下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=26798

面向。净程序员的转储分析

面向。净程序员的转储分析

3。Adplus方式

运行cmd,进入Adplus。exe文件所在目录,运行如下命令:
单个进程:adplus . exe, mdash;挂,mdash;p & lt; PID>,mdash;o d:,日圆;
多个进程:adplus . exe, mdash;挂,mdash;p & lt; PID1>- p & lt; PID2>,mdash;o d:,日圆;
迷你转储:adplus . exe - MiniOnSecond, mdash;挂,mdash;p & lt; PID>,mdash;o d:和日元;

<>强抓取方式的选择:

任务管理器的抓取适合转储文件不大,对应系统盘默认存放路径的空间完全足够的情况。

debugdiag的抓取可以适应多种情况,通过工具的配置来完成。

Adplus解决了任务管理器抓取方式的限制,可以处理对应多个进程大文件的情况。

<人力资源/>

, <强>二。转储的手动分析

工具:winbdg

WinDBG不是专门用于调试。net程序的工具,它更偏向于底层,可用于内核和驱动调试。进行普通的。net程序调试还是使用微软专为。净开发的调试工具MDBG更方便一些。但是WinDBG能看到更多的底层信息,对于某些特别疑难的问题调试有所帮助,例如内存泄漏等问题。

工具下载:WinBdgTool。zip

测试代码下载:MyDumpTest。7 z

首先添加设定符号文件路径(符号路径),当你使用Visual Studio编译程序时,是否有留意到在bin/调试文件夹下会有.pdb后缀的文件?这些文件包含有dll程序集的调试符号,pdb文件并不包含有执行代码,只是使调试工具能把代码执行指令翻译为正确的可识别字符。微软提供了包含大量pdb文件的公共服务器,地址如下:http://msdl.microsoft.com/download/symbols。打开windbg程序,选择,“文件→文件Path&象征白马王子,宝贝,,把下面的内容复制进去保存.srv * c: \ temp * http://msdl.microsoft.com/download/symbols。

面向。净程序员的转储分析

下面这行命令如果你发现出现Unable 用verify 校验和…或者的消息那是因为你没有添加。net的sos扩展或者sos的版本没有对应上. . Net1.1时代的sos扩展已经自带于下载安装的WinDBG中,从.Net2.0以后,sos扩展已经自带到。net框架中:C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ SOS.dll,为了不至于引起混淆,最好的方法就是使用前面的loadby调试器元命令来让WinDBG自己决定加载什么版本的sos。

添加sos:。负载C:\WINDOWS\ Microsoft.NET \ Framework \ v4.0.30319 \ sos。dll .

<强>加载SOS后,使用命令。链来查看调试链中是否已经成功包含SOS扩展。

面向。净程序员的转储分析

<强>通过!eeversion查看sos的版本号。

面向。净程序员的转储分析

面向。net程序员的转储分析