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

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

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


一. 抓取dump

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

2. 通过debugdiag

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

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

3. Adplus方式

运行 cmd ,进入 adplus.exe 文件所在目录,运行如下命令:
单个进程: adplus .exe – hang – p <PID> – o d: ¥
多个进程: adplus .exe – hang – p <PID1> -p <PID2> – o d: ¥
Mini Dump : adplus .exe – MiniOnSecond – hang – p <PID> – o d: ¥

  抓取方式的选择:

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

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

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


二. dump的手动分析

工具: winbdg

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

工具下载: WinBdgTool.zip

测试代码下载 : MyDumpTest.7z

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

下面这行命令 如果你发现出现Unable to verify checksum…或者的消息 那是因为你没有添加.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:.load C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\sos.dll。

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

这表明当前dump里记录的线程数。如果要切换线程,用波浪线+序号+s来切换,如切换到线程2,那么用~2s即可。

  lm 查看你加载的模块

kb 查看native code调用栈

用~现在只有线程信息,对于每个线程,在被抓的那一刻,在执行什么,我们有命令:kb。

看到clr大家应该很眼熟吧。这里已经可以看到较详细的调试信息了。

因为我们的测试程序是测试的是线程阻塞所以我们选一个运行时间为0的,例如415

!dso 查看这个堆栈中的对象

!clrstack 查看这个线程的托管代码调用栈

通过上面我们已经可以看出这个线程一直都是处于阻塞状态。

到这里基本上一个小的测试程序可以告一段落了,当然windbg的功能远远不止如此,这里分享一些资源给大家。

资源下载 : WinDbg入门.rar  Windbg用法详解.7z


三. dump的自动分析

1. debugdiag

这里有几种规则类型的选择,一般我们常用的用crash来查看锁和堵塞的情况,performance来检查性能的问题。

选择完成后直接点击开始分析

生成报表

查看描述

点击详细

这样,红色字体就是问题的所在。然后根据具体问题下发到对应开发部门解决。

2. Hang自动化分析

在WinDbg输入如下命令

  .shell -ci “~* kb;.echo MANAGED THREADS;!threads;.echo MANAGED CALLSTACKS;~* e !clrstack;” D:\xx.exe


本篇先到此 希望对大家有帮助

dump分析超级详细分析相关推荐

  1. ffmpeg命令分析【详细分析合集】

    ffmpeg命令分析[内容包括]-vf/ac/b:v/r/re/segment/t/ss/output_ts_offset/vn/acc/print/yuv420p/yuv封装mp4/FFmpeg硬件 ...

  2. 【数据结构-源码分析】HashMap源码分析(超级详细)

    文章内容 1.HashMap简介 2.类结构 3.属性 4.构造方法 5.方法 5.1.put方法(新增) 5.2.resize方法(扩容) 5.3.get方法(遍历) 5.4.remove方法(删除 ...

  3. PAT乙级题解1003(超级详细分析,看完就懂)

    题目描述: 题意简化: 给定一个字符串和一些判定规则,判断该字符串是否正确 思路分析(解读规则): ① 字符串中只能含有P , A , T这三种字符 ②形如PAT , APATA , AAPATAA ...

  4. PAT乙级题解1005(超级详细分析,看完就懂)

    题目描述: 题意简化: 覆盖的定义:将n按照卡拉兹猜想去递推,递推过程的数就是被n覆盖的数 给定一个序列,找出序列中那些没有被序列其他数字覆盖过的数,从大到小输出 思路分析: 对于序列中的每个数,按照 ...

  5. PAT乙级题解1009(超级详细分析,看完就懂)

    题目描述: 题意简化: 将一句话中的单词倒序输出 思路分析: 用vector存放一句话中的每个单词,再倒序输出即可 要用到while(cin >> str),表示每次输入一个string类 ...

  6. PAT乙级题解1006(超级详细分析,看完就懂)

    题目描述: 题意简化: 对于一个三位正整数x1x2x3x_1x_2x_3x1​x2​x3​(x1x_1x1​表示百位数字,以此类推),输出x1x_1x1​个B,输出x2x_2x2​个S,再输出12-x ...

  7. PAT乙级题解1008(超级详细分析,看完就懂)

    题目描述: 题意简化: 将数组的后m(m <= n)个元素移到数组(下标从0开始)前面 思路分析: 可以从输出角度入手,不需要真正移动元素,分类讨论: ①如果m >= n,例如m = 10 ...

  8. HashMap源码分析(超级详细)

    1.HashMap简介 HashMap基于哈希表的Map接口实现,是以key-value存储形式存在.(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同.) 1 ...

  9. Java设计模式超级详细分析(包含代码)

    设计模式(Design Pattern,DP) 目录 设计模式(Design Pattern,DP) 设计模式的六大设计原则 开闭原则:Open Closed Principle,OCP 单一职责原则 ...

最新文章

  1. 【SSRS】入门篇(二) -- 建立数据源
  2. 阿里云徐立:面向容器和 Serverless Computing 的存储创新
  3. ab压力测试(了解ab工具,实验对网页进行测试)
  4. c# 读取机器CPU信息,硬盘信息,网卡信息
  5. 客户机操作系统已禁用 cpu。请关闭或重置虚拟机。_黑科技教学丨Win10竟然内置了一台虚拟机?教你如何玩转它...
  6. DB中字段为null,为空,为空字符串,为空格要怎么过滤取出有效值
  7. python100例详解-【学习笔记】python100例
  8. eclipse提交代码到github其他分支
  9. HS8145X6华为界面telnet23账号密码重置
  10. 蓝桥杯科学素养题(2020年12月-2021年12月)
  11. linux系统外接硬盘_linux系统外接存储管理命令
  12. 解决路由器登录页被维盟智能路由管理系统拦截
  13. 新手如何使用腾讯云云服务器详细教程
  14. 送书【新书】 |《Git从入门到精通》
  15. linux怎么移植安卓rom,【经验技巧】任意手机移植ROM 教程,超详细ROM 技术详细......
  16. SMT32F407+FreeRTOS+LWIP+LAN8720使用Cube MX情况下无法实现网线热插拔
  17. 第十一章 认识与学习BASH【鸟哥linux私房菜学习笔记】
  18. java box类定义三变量_01.类的成员变量:\n设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计...
  19. 艾默生质量流量计开创流量仪表行业新的标准
  20. 学生管理系统的mysql数据库设计_MySQL 数据库 -- 学生管理系统数据库设计

热门文章

  1. 爱智EdgerOS之深入解析后端流控大杀器Throttle
  2. 友斯考特·杨(Scott Young)看我怎么驾驭MIT计算机科学的课程
  3. 推荐好用的在线客服系统
  4. 【Linux】Linux常用操作命令
  5. rhino android js,js浏览器版本和移动端版本总结
  6. C语言-社保工资查询系统
  7. 【网络爬虫】爬取神奇宝贝Pokemon图鉴图片大全
  8. 安装tpcc mysql_MySQL:安装tpcc 标准测试包
  9. 非静压模型NHWAVE学习(6)——波浪模拟算例学习(Periodic wave over a submerged bar)
  10. 离开HP/HPE/Micro Focus