Windbg程序调试是.Net高级开发需要掌握的必备技能,分析内存泄露、分析高CPU、分析线程阻塞、分析内存对象、分析线程堆栈、Live Dedugging。这个领域可以说一个技能+场景化应用的结合,如果单学Windbg命令,不理解实际Troubleshooting中的作用,是没有意义的。

工欲善其事必先利其器,我们先从常用的命令和示例说起。

1. 先准备一个Dump文件,建议使用64位应用程序。例如:64位IIS应用的w3wp进程,64位exe进程都可以。如果抓Dump文件,很简单:任务管理器-进程-右键【创建转储文件】

2. 下载并安装Windbg,下载链接:https://developer.microsoft.com/zh-cn/windows/downloads/windows-10-sdk,一路下一步,选择【Debugging Tools for Windows】

打开之后,Ctrl+D,打开第一步抓的Dump文件,开始今天的常用命令介绍。

1. 加载SOS调试扩展dll

.loadby sos clr

2. 设置并重新加载调试符号文件的命令,将.Net 一些重要的pdb文件下载到指定的路径中,加载到Windbg调试环境中,这样,我们就可以看到程序在哪一行出错,运行到哪一行了

1 .symfix+ C:\symbols
2 .reload

3. 打印当前调试符号文件搜索路径

0:000> .sympath

4. 查看线程池,分析并确认CPU使用率,可以使用哪个指令

0:000> !threadpool
CPU utilization: 2%
Worker Thread: Total: 19 Running: 2 Idle: 17 MaxLimit: 32767 MinLimit: 4
Work Request in Queue: 0
--------------------------------------
Number of Timers: 2
--------------------------------------
Completion Port Thread:Total: 4 Free: 4 MaxFree: 8 CurrentLimit: 4 MaxLimit: 1000 MinLimit: 4

5. 查看线程的整体运行情况

!threads

6. 查询指定线程的调用堆栈,例如34号线程

 ~34s

!clrstack

7. 查看线程消耗CPU资源情况

!runaway

第一列是线程号,第二列是Total的CPU使用时间

8. 查看当前线程栈上所有对象的信息,Dump stack objects

!dso

9. 查询内存中指定对象的信息 Dump object

!do

10. 查询内存中指定数组对象的信息 Dump Array

!da

11. 查看当前线程的堆栈和每行堆栈上的变量信息

!clrstack -a

12. Windbg 附加进程调试,启用CLR异常捕获、查看异常、查看异常所在线程堆栈、禁用CLR异常调试、退出调试

sxe clr
g
!pe
!clrstack
sxd clr
qd

13. 查看托管堆上内存对象的分布、三个代的信息

!eeheap -gc

14. 查看托管堆上加载的Dll

!eeheap -loader

15. 什么是内存对象代提升,垃圾回收中未回收的对象也称为幸存者,并会被提升到下一代。通过代提升的情况,可以分析对象的存活时间

16. 查询内存中各类对象的总个数和总内存占用

!dumpheap  -stat

17. 查询内存中大对象的个数和对象大小

!dumpheap -stat  -mt -min 85000

18. 查看内存的析构队列的指令

!finalizequeue

19. 请输入查看对象000000123557DFC0的gcroot的指令

!gcroot 000000123557DFC0

20. 查看线程阻塞的指令

!syncblk

21. 查看Dump中所有System.Net.Sockets.Socket对象统计信息的指令

!dumpheap -type System.Net.Sockets.Socket -stat

------------------------------------------------------------------------------------------------------------------------------------------------------------

最近一直在频繁使用Windbg做线上Dump调试,与微软做Case交流的时候,发现微软CSS团队,用了一个非常效率的Windbg 插件,Mex:

使用介绍:

https://blogs.msdn.microsoft.com/luisdem/2016/07/19/mex-debugging-extension-for-windbg-2/

下载地址:

https://www.microsoft.com/en-us/download/details.aspx?id=53304

下载之后,解压缩,有两个目录,X64和X86,大家根据自己的需要进行加载,目前我们主要用X64。当然也可以直接把这个扩展拷贝到Windbg运行目录中。

这里,我们先show一下Windbg加载mex扩展:

0:000> .load D:\Mex\x64\mex.dll
Mex External 3.0.0.7172 Loaded!

当然,我们可以同时继续加载sos

0:000> .loadby sos clr

查看已经加载的扩展:

如果本机调试Dump,建议设置调试符号的路径:

srv*c:\symcache*http://msdl.microsoft.com/download/symbols;c:\symcache

查看Mex的各种命令:

0:000> !mex.help
Mex currently has 255 extensions available.  Please specify a keyword to search.
Or browse by category:

大家可以逐一点进去看一下。

这里我给大家show几个常用的命令:

1. !dae  查看所有的Exception

2. 查看所有的线程状态

!mex.mthreads

3. !clrstack2 查询线程堆栈

4. do2 查看对象

5. 查看所有的Asp.Net请求

!mex.aspxpagesext

6. 查看当前线程的异常

!mex.pe2

7. Foreach

!foreachobject  -x "!do2 @#Obj"  System.Net.Socke

Windbg程序调试系列1-常用命令说明Mex扩展使用总结相关推荐

  1. Android调试系列之dumpsys命令

    Android调试系列之dumpsys命令 版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/deta ...

  2. Windbg程序调试--转载

    https://www.cnblogs.com/fang-beny/p/3582653.html Windbg程序调试--转载

  3. Docker系列之常用命令操作手册

    Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Docker命令进行实践 文章目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4 ...

  4. Linux系列 Linux常用命令(2)

    作者简介:一名在校云计算网络运维学生.每天分享网络运维的学习经验.和学习笔记.   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.Linux常用命令后续 1.创建目录 ...

  5. Unity ADB调试和一些常用命令

    将AndroidSDK中的platform-tools路径加入系统环境变量中,就cmd下任何路径都可以使用adb 手机改成开发者模式,并且开启USB调试和USB安装 打开cmd,adb forward ...

  6. Hadoop系列-Hadoop常用命令(五)

    Hadoop 常用命令 所有的 Hadoop 命令均由 bin/hadoop 脚本引发.不指定参数运行hadoop脚本会打印所有命令的描述. 用法: hadoop [--config confdir] ...

  7. 认真看完就会系列——CentOS常用命令

    文章目录 一.概述及环境搭建 二.常用的基本命令(必掌握) 目录管理 基本属性 文件内容查看 三.Vim编辑器使用及账号用户管理 账号管理 用户组管理 磁盘管理 四.三种软件安装方式及服务器基本环境搭 ...

  8. IBM V系列存储常用命令

    存储配置命令 1.设置服务IP: ----------------------------------------------------------------------------------- ...

  9. ADB调试方法及常用命令

    无线adb的使用(平板和电脑要在同一网段) 1.插上USB后,在cmd中设置TCP/IP端口号位5555 C:\Users\Administrator>adb tcpip 5555 restar ...

  10. android命令大全 pdf,android调试桥(adb)常用命令.pdf

    Android 调试桥 (adb) 是多种用途的工具,该工具可以帮助你管理设备或模拟器的状态. 可以通过下列几种方法加入 adb: 在设备上运行 shell 命令 通过端口转发来管理模拟器或设备 从模 ...

最新文章

  1. 基于Win32Api创建窗口程序
  2. HTTP知识普及系列:HTTP返回状态码
  3. c语言学生管理系统write to a text file,语言编程学生成绩管理系统.doc
  4. Leetcode每日一题:452.minimum-number-of-arrows-to-burst-balloons(最少数量的箭引爆气球)
  5. Django网站管理--ModelAdmin
  6. 【专家访谈】测试专家 - 陈林钧,访谈问题收集中
  7. Merged Manifest官方文档
  8. mysql如何设置host_如何快速修改MySQL用户的host属性
  9. [转]c#对象的浅拷贝和深拷贝
  10. 划片机操作安全注意事项
  11. 【模式匹配】之 —— Z-BOX算法
  12. 数字改造有色金属产业链,发挥产业优势效能
  13. 泰坦尼克号幸存者预测(分类)
  14. SQLServer The datediff function resulted in an overflow
  15. 全球与中国线路型避雷器市场发展前景与投资战略规划分析报告2022~2028年
  16. Burnside引理Pólya定理
  17. 基于python的Django框架购物商城设计与实现毕业设计毕设参考
  18. SQL Server 行转列
  19. 【ESP32Arduino+MPU6050 dmp姿态解算】学习笔记 PlatformIO 复制即可使用
  20. 中国乡镇的生产力价值,是如何被拼多多重新定义的?

热门文章

  1. python reportlab
  2. 慕课马尔萨斯人口模型
  3. OC_键值编码KVC(Key-Value Coding)
  4. 计算机专业窗体的事件何时触发,高三计算机专业VB试题(六)1
  5. 兆骑科创创新创业赛事活动承办,科创企业,企业孵化器
  6. pyton人值得拥有
  7. reactos操作系统实现(110)
  8. 风云2号卫星云图_中国为什么要发这么多卫星?答案没有出乎意料
  9. 黑客通常可以分为以下8种类型
  10. ijkplayer 自定义解码器