這個腳本工具是和debugger tools一起安裝的??梢宰詣拥膸湍惚O視某個程序,并在你設定的條件下生成一個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。
http://www.rzrgm.cn/shouwu/archive/2012/12/05/2802636.html