后台转储文件是进程的内存映像。程序的执行状态可以通过调试器保存到转储文件中。在Windows系统上,转储文件分为内核转储和用户态转储。前者一般用来分析内核相关的问题,比如驱动;后者一般用于分析用户态程序中的问题。普通程序员可能接触不到dump文件,但是运维会用到更多。但是,如果身处抗战前线,学习dump的分析无疑是利器。因为在很多场景下,由于线下单元测试或者性能测试的测试用例不够,或者生产环境和测试环境的硬件和pv级别的差异,生产环境的测试用例不够,导致问题暴露不出来。日志或堆栈信息以指出问题的原因。这时候分析dump文件就非常有用了。文本分为3个部分来捕获转储以及手动和自动分析转储。它是初学者自动分析转储的一个非常方便的渠道。1.捕获dump1。最简单的方法是通过任务管理器2.通过debugdiagdebugdiag是微软提供的dump捕获和分析工具。可以建立各种规则来捕获不同条件下的转储,并且它还具有强大的转储分析功能。下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=267983。Adplus模式下运行cmd,进入adplus.exe文件所在目录,运行如下命令:单进程:adplus.exe–hang–p–od:\多进程:adplus.exe–hang–p-p–od:¥MiniDump:adplus.exe-MiniOnSecond–hang–p–od:选择¥ 抓取方式:任务管理器抓取适用于dump文件不大,对应系统盘的默认存放路径有足够的空间。debugdiag的捕获可以适应各种情况,可以通过工具的配置来完成。Adplus解决了任务管理器抓包方式的限制,可以处理大文件对应多个进程的情况。#p#2.dump手动分析工具:winbdgWinDBG不是专门用来调试.Net程序的工具,它比较底层,可以用来调试内核和驱动程序。使用微软为.Net开发的调试工具MDBG来调试常见的.Net程序会更加方便。但是WinDBG可以看到更多的底层信息,这对于调试一些特别棘手的问题很有帮助,比如内存泄露等问题。测试代码下载:MyDumpTest.7z首先添加并设置符号文件路径(SymbolPath)。当你使用VisualStudio编译程序的时候,有没有注意到bin/Debug文件夹下会有一个.pdb后缀的文件?这些文件包含dll程序集的调试符号,而pdb文件不包含执行代码,只是使调试工具能够将代码执行指令翻译成正确可识别的字符。微软在以下地址提供了一个包含大量pdb文件的公共服务器:http://msdl.microsoft.com/download/symbols。打开windbg程序,选择“File->SymbolFilePath...”,复制以下内容并保存。srv*d:\debug\symbols*http://msdl.microsoft.com/download/symbols。如果你发现消息Unabletoverifychecksum...或在下面的命令行中,那是因为你没有添加.net的sos扩展名或sos的版本不对应。下载的WinDBG中已经安装了.Net1.1时代的SOS扩展。从.Net2.0开始,.Netframework中包含了SOS扩展名:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\SOS.dll,为了不引起混淆,最好的办法是使用之前的loadby调试器元命令让WinDBG决定加载哪个版本的SOS。添加sos:.loadC:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\sos.dll。加载SOS后,使用命令.chain查看SOS扩展是否已成功包含在调试链中。通过!eeversion查看sos的版本号。实际命令:~查看线程这显示了当前转储中记录的线程数。如果要切换线程,用波浪线+序号+s切换,比如切换到线程2,那就用~2s。lm查看你加载的模块kb查看原生代码调用栈~现在只有线程信息,对于每个线程,被捕获的那一刻正在执行什么,我们有命令:kb。看到clr大家应该都不陌生了。在这里您已经可以看到更详细的调试信息。!runaway(查看线程对应的CPU运行时间)因为我们的测试程序是测试线程阻塞,所以我们选择运行时间为0,比如415!dso查看这个栈中的对象!clrstack查看本线程的托管代码调用Stack通过上面我们已经可以看出本线程一直处于阻塞状态。至此,基本上一个小测试程序就可以告一段落了。当然,windbg的功能远不止于此。这里有一些资源与您分享。资源下载:GettingStartedwithWinDbg.rarWindbg用法详解.7z#p#3。dump的自动分析1.debugdiag有几种类型的规则可以选择。一般我们经常用crash来检查锁和阻塞,用performance来检查性能问题。选择完成后,直接点击开始分析生成报告,查看说明,点击查看详情。这样一来,红色字体就是问题所在。然后根据具体问题发给相应的开发部门解决。2.挂起自动分析在WinDbg.shell中输入如下命令-ci"~*kb;.echoMANAGEDTHREADS;!threads;.echoMANAGEDCALLSTACKS;~*e!clrstack;"D:\xx.exe本文先到这里希望对大家有所帮助。本文来自:http://www.cnblogs.com/dubing/p/3878591.html