【WIN】WinDBG 常用命令整理

【符号说明】

 G:\run3\
 SRV*G:\WinSymbol.wlminisecmod*http://msdl.microsoft.com/download/symbols

WinDBG 常用分析命令整理

1. 如何分析

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

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

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

2. 常用命令

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

1)基础命令:

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

2)内存状态

 !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 列中的最大值

3)线程调用:

 !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 #显示同步块

4)其它:

 !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

5)域,程序集,类

 !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 结构指针或方法体内的代码地址指定的托管方法的反汇编(带有批注)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值