windgb,sos,adplus,tinyget常用命令

1. adplus

这个脚本工具是和debugger tools一起安装的。可以自动的帮你监视某个程序,并在你设定的条件下生成一个dump文件保存在debugger目录下。使用这些工具时,都需要将命令提示符窗口切到debugger目录。常见的用法如下:

adplus  -hang -pn w3wp.exe    在生成hang状态下的dump时,adplus都会立即产生dump文件。在输入此命令并按enter后,此命令将立即获取一个w3wp.exe的内存切片。但是此命令会弹出一个确认窗口,如果你觉得这个比较麻烦的话,你可以在最后加上–quiet 命令来避免窗口的弹出。

adplus -hang -p 1234 –quiet  相信你很快就能发现,上行命令是使用的process name,而这个命令是使用的process id。同时,它可以直接生成dump,不会弹出确认窗口。

adplus -crash -pn w3wp.exe   此命令是获取程序crash时的dump。它不同于hang立即得到dump,它会一直attach在w3wp.exe程序上,直到w3wp.exe程序crash。其它类似参数的效果都同上。

当然,如果你使用Vista的话,你可以很方便的在任务管理器(task manager)中通过右键 Create dump file获取dump文件。

 

2.  tinyget

这个工具是用来对一个网站进行压力测试的。最常用的命令是:

tinyget -srv:localhost -uri:/BuggyBits/FeaturedProducts.aspx -threads:30 -loop:50  该命令表示同时启动30个线程发送50个请求到本地IIS上BuggyBits站点的FeaturedProducts页面。你也可以在命令窗口中使用”tinyget /?”查看更多详细的命令。

 

3.  windbg

Windbg的命令都是一点号(.)来开始的,它不同于叹号开始的命令(!),叹号开始的命令都是sos.dll中的命令。

.load sos 每次打开windbg调试.net程序的dump时,我们首先要输入此命令。它的用途是使得windbg可以支持托管代码(managed code)的调试。

.time  查看dump文件生成时的时间,其中包括系统当前时间,开机总时间,程序运行总时间,程序运行在内核态总时间以及用户态总时间。

 

4. sos.dll

最强大的功能还要数sos.dll中的命令,它是我们调试.net程序的基础。下面介绍一些基本命令:

!help 它用来查看每个命令的用法。如!help !threads,用来查看!threads命令的具体用法。如果直接使用!help,它将列出sos的基本信息。

!threadpool通过这个命令,我们可以很容易的看出在dump文件生成时的确切CPU使用率,同时,我们也可以看到队列中等待的work requests,timers以及completion port threads等信息。Timers,work requests以及completion port threads都是CLR的线程种类,在以后的文章中我会详细介绍。

!runaway它是用来罗列所有正在运行的线程以及它们的CPU占用率。通过这个命令,我们可以很容易的去trouble shooting一些CPU占用率过高的问题。

!threads 它是用来罗列所有正在运行的托管(managed)线程的详细信息,如CLR线程所在的appdomain等等。如果线程的ID显示XXXX,说明这个线程已经结束,等待被回收。

~[id]s 此命令用来切换到某一特定线程。如 ~20s代表切换到ID为20的线程。

!clrstack 此命令用来显示此线程的managed code的callstack。我们可以加上-p参数来得到更加详细的信息。

!dumpobject(!do) 通过这个命令,我们可以查看某个特定address的object信息。如果这个address指向一个string,我们就可以看到这个string内存储了什么值。

!dumpstackobjects(!dso)  此命令用来查看被当前线程堆栈引用的所有托管对象。

!dumparray(!da) 当我们查看线程堆栈上的object时,我们可以使用!do命令。但是如果该object是一个array的话,!do只能得到array本身的信息,并非其存储的内容。此时!da就发挥了用场。

!objsize 如果我们想查看一个object的total size的时候,我们需要使用!objsize命令。比如当我们!da一个array时,它显示的size仅仅是包含的type的size,并非实际的size。我们可以使用!objsize address来查看这个array的实际size。

!dumpheap 它是用来查看堆上所有的object。通常我们加上 –stat参数来帮我们做个归类,否则它会罗列出许多繁杂的信息。同时,它还有几个比较常用的参数,如-type,-mt。-type用来列出某一特定类型的所有object,如!dumpheap –type System.String将列出堆上所有的string。-mt是用来列出某一特定MethodTable的所有object。大家知道,每一个引用类型都对应一个MethodTable,假设System.String类型的MethodTable是02c39310,那么我们还可以通过!dumpheap –mt 02c39310来找到堆上所有的string。

 

 

https://www.cnblogs.com/shouwu/archive/2012/12/05/2802636.html

posted @ 2020-06-01 18:11  Shikyoh  阅读(237)  评论(0编辑  收藏  举报