Windbg 的使用和常用命令


Windbg是Microsoft在windows平台下,强大的用户态和内核态调试工具。我们经常用它来分析DUMP文件,来解决线上服务器的疑难问题,比如CPU升高,内存溢出,响应时间慢等问题。

下面介绍下Windbg 的使用和常用命令

从MSDN下载  Debugging Tools for Windows

下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=8279  里面包函了Windows 的软件开发工具包,注意选择系统的版本。

如果你只想下载Debugging Tools for Windows, 在安装过程中, 选择 Debugging Tools for Windows 勾选框,清除其他勾选框。

 

配置Windbg

打开运行Windbg   Windows Kits\8.1\Debuggers\x64\windbg.exe

从工具栏选择File>Symbol File path

设置Symbol File  (.pdb 文件)路径 SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols  调试的时候会从微软网站上下载符号,并存放在c:\mysymbol目录中

如果有其它符路径用分号隔开,如  ;c:\pdb

抓取DUMP文件

如何抓取将在另一篇文章中说明。

从工具栏选择File>Open Crash Dump 打开抓取的.DUMP 文件

加载DUMP后,调试屏幕会出现当前DUMP 的一些信息

加载调试扩展SOS

用Windbg 调试托管程序,需要加载SOS 调试扩展 (SOS.dll) 。

在windbg.exe的同级目录已经自带了SOS.dll 。但如果这个版本和服务器运行的Framework版本不一致,可以从系统目录C:\Windows\Microsoft.NET中找到匹配的SOS版本。

我用的64 位 Framework4.0 ,所以从下面目录中找到

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll

在windbg.exe的同级目录还有一个Psscor4目录,里面包函了另一个扩展psscor4.dll。psscor 是对SOS 的升级,加载psscor4也是一样的。

加载命令如下:

.load 目录名/psscor4.dll
.load 目录名/SOS.dll

!help 查看命令列表

如何分析

人个观点:分析线上问题的第一步,是先从监控软件中(比如zabbix,性能计数器)和系统日志获取信息。观察CPU使用率,CPU LOAD,内存,网络连接数,线程数,响应时间等各种性能指数。

线上的各种性能指数的变化,都有其内在的联系。比如,内存上涨过快同时也会导致CPU 升高。CPU升高,导致服务器性能下降,响应时间慢,网络连接数上升。

通过观察各种指标,然后再定位具体问题。明确了问题方向后,再通过Windbg 分析Dump验证和查找问题的根源。

常用命令

命令很多,把从网上了解到的和用过的一些命令做一次整理,MSDN 对SOS调试命令的说明: http://msdn.microsoft.com/zh-cn/library/bb190764.aspx

基础命令:
.load Psscor4/amd64/amd64/psscor4.dll 加载psscor4
.load SOS/SOS.dll
.sympath 设置符号路径
.cls 清屏
version 查看版本信息
lm 列出加载模块
!help 显示命令帮助
!help EEHeap 显示EEHeap命令帮助
!EEVersion 显示公共语言运行时版本

内存状态:

!EEHeap -GC 显示托管堆统计信息
!EEHeap -loader 显示加载程序数据结构统计信息
!DumpHeap -stat 显示垃托管堆各类型统计信息
!DumpHeap -type Free -stat 显示所有碎片类型统计信息
!DumpHeap -type System.String -min 150 -max 200 显示所有System.String类型 -min -max 字节统计信息
!DumpHeap -min 85000 -stat 显示大对象统计信息
!DumpHeap -mt 选项仅列出与指定的 MethodTable 结构对应的那些对象
!DumpHeap -mt 00000000022245b0 -min 85000 查看MT 00000000022245b0中大对象
!DumpHeap -stat 023e1000 033db630 按地址统计
!DumpArray 显示数组对象
!DumpObj (!do) 显示有关指定地址处的对象的信息
!ObjSize 显示指定对象的大小
!DumpStackObjects (!dso) 显示在当前线程内找到的所有托管对象
!GCRoot 显示有关对指定地址处的对象的引用(或根)的信息。
!CLRUsage 显示托管堆统计信息(GC堆大小,提交内存,虚拟内存),psscor4的扩展命令
!DumpMT 显示有关指定地址处的方法表的信息。
!DumpMT -MD 显示有关指定地址处的方法表所有方法的列表。
!address -summary 显示最大可用区域
!vmstat 最大可用区域是 MAXIMUM 列中的最大值

线程调用:

!ThreadPool 显示有关托管线程池的信息,包括队列中工作请求的数目、完成端口线程的数目和计时器的数目
!Threads 显示进程中的所有托管线程
!Threads -live 选项显示与活动线程关联的线程
!Threads -pecial 选项显示由 CLR 创建的所有特殊线程
!ThreadState 显示线程的状态。 value 参数为 Threads 报告输出中的 State 字段的值。
~54s 转到54线程
!CLRStack 提供当前托管代码的堆栈跟踪。
!CLRStack -p 选项显示托管函数的参数。
!CLRStack -l 选项显示有关帧中的局部变量的信息。
!DumpStack 显示堆栈跟踪 包括非托管。
!DumpStack -EE 命令仅显示托管函数。
!EEStack 对一个进程中的所有线程运行 DumpStack 命令。
k 显示当前线程的call stack
kb 显示当前线程的call stack
~*kb 显示所有线程的call stack 可以 寻找线程中触发GC的函数(mscorwks!SVR::GCHeap::GarbageCollectGeneration)
!ASPXPages 显示当前处理的HttpContext,psscor4的扩展命令
!SyncBlk 显示同步块

其它:
!runaway 显示线程cpu时间
vertarget 查看系统运行时间
!PrintException (!pe) 显示在当前线程上引发的最后一个异常
!address 命令显示某一地址上的页信息
!SaveModule 将加载到内存中指定地址的图像写入指定文件,lm 列出的
!SaveModule 081f0000 d:\\commandobject.dll
!FinalizeQueue 显示所有已进行终结注册的对象。
!GCHandles 显示有关进程中的垃圾回收器句柄的统计信息。

S 可以搜索内存 在内存中搜索sina.com: s –u 0012ff40 L?8000000 “sina.com”
r 显示寄存器的信息
d 显示内存地址上的值 使用d命令显示esp寄存器指向的内存,默认为byte: d esp
用dd命令直接指定054efc14地址,第二个d表示用DWORD格式: dd 054efc14

域,程序集,类
!DumpDomain 枚举在指定的 AppDomain 对象地址内加载的每个 Assembly 对象。若在调用 DumpDomain 命令时不提供任何参数,则将列出过程中的所有 AppDomain 对象
!DumpAssembly 显示有关程序集的信息。DumpAssembly 命令将列出多个模块(如果存在)。
!DumpModule  显示有关指定地址处的模块的信息。 可以使用 DumpDomain 或 DumpAssembly 命令检索模块的地址
!DumpModule [-mt] 选项显示模块中定义的类型和模块所引用的类型
!FindAppDomain 确定指定地址处的对象的应用程序域

!IP2MD <Code address> 显示已 JIT 编译的代码中指定地址处的 MethodDesc 结构。
!DumpMD <MethodDesc address>
!U <MethodDesc address> | <Code address> 显示由方法的 MethodDesc 结构指针或方法体内的代码地址指定的托管方法的反汇编(带有批注)

 


码神部落- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与码神部落立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者对牛谈情码神部落享有帖子相关版权。
3、码神部落管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者对牛谈情码神部落的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。

最新回复 (0)
    • 码神部落
      2
        立即登录 立即注册 GitHub登录
返回
发新帖
作者最近主题: