Windbg调试学习

一、为什么学习使用Windbg调试

Windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的另外一个用途是可以用来分析dump数据。

(以上截取自百度百科,其实说白了就是因为工作中用到了才学习的。。。。。)

二、windbg的环境配置

参考 https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/getting-started-with-windows-debugging

 

三、栗子

首先找到一个你要解析的dmp文件,别问哪来的,说了是工作中用到的。。。。

然后打开windbg,会看到

然后点击file的Open  Crash Dump,选择要解析的dmp文件,然后得到

图上的四个圈圈是有点用但没太大用的信息,其中第四个是运行时间;

之后最简单的方法就是输入:

!analyze -v

这条指令可以理解为快速解析,一般只是偶尔查下闪退问题的会这个就够了,于是得到:

 

 

得到上面的两张图,图中圈起来的地方就是程序出问题的地方,1 3是位置,2 4是原因;

 

四、相关的一些指令

    1.与内存相关的操作指令
    !eeheap –gc:正是查看GC堆得命令,查看GC堆上的内存占用是多大
    !eeheap –loader:正是查看Loader堆得命令
    !dumpheap –stat:就是GC堆上的统计,就看看GC堆上存活的对象是那些
    !dumpheap -mt <<MethodTable address>>:查看该地址上的对象
    !dumpheap –type:通过 type 参数查看内存中指定类型的对象
    !gcroot +对象地址:这个命令就可以得到这个对象的"根"
    !objsize +对象地址:查看对象占用多大的内存
    !name2ee TestClass.exe TestClass.Program.test ://显示test方法相关的地址
    !dumpmt -md 00976d48 ://得到类的成员函数详细信息
    !dumpmt:找到相关MethodTable处的相关信息。
    !dumpmd:根据MethodDesc找到相关模块信息,比如MethodTable.
    !dumpdomain:显示所有域里的程序集,或者根据参数获取指定域。
    !dumpil 00973028:// 显示这个方法被编译器编译之后的IL代码
    !dumpobj(do) 012a3904: //显示一个对象的具体内容,看对象里面有什么,值是什么
    !dumpmodule 1ee30010:查看某个模块的详细信息
    !DumpArray: //查看数组信息

    2.与CPU相关的操作指令
    !threadpool:查看线程池CPU使用量,我认为WEB的比如iis应用程序池进程w3wp如果CPU使用过高,那查看线程池命令肯定看的出来过高,这个是我自己的理解,c/s的就不一定了。
    !threads:查看所有托管线程情况
    !clrstack:到具体某个线程后,本线程托管代码的调用栈情况
    ~* e !clrstack:所有线程托管代码的调用栈情况
    !runaway:查看线程占用CPU时间,可以从中找到哪个线程占用时间更高。
    ~number s:number为具体哪个线程的ID。
    !dumpstackobjects(!dso):本线程调用栈所有对象实例
    !dumpdomain:显示所有域里的程序集,或者根据参数获取指定域。
    !savemodule:根据具体程序集地址,把当前程序集的代码生成到指定文件
    !PrintException:显示在当前线程上引发的最后一个异常错误信息
    !StopOnException:在指定异常错误信息停止运行
    !VerifyHeap:检查垃圾回收器堆中是否有损坏迹象,并显示找到任何错误
    !SyncBlk –all:显示所有SyncBlock 结构情况

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值