使用windbg調試iis應用程序池崩溃的asp.net 2.0 bug.

使用windbg調試iis應用程序池崩溃的asp.net 2.0 bug.

新上線的asp.net 2.0 項目,不定時的報告以下錯誤:

Faulting application w3wp.exe, version 6.0.3790.3959, stamp 45d6968e, faulting module kernel32.dll, version 5.2.3790.4480, stamp 49c51ee2, debug? 0, fault address 0x0000bef7

並使iis應用程序池崩溃,在windows的事件日志中,有上述錯誤報告。

一、從微軟官網下載WinDbg,我下載的版本是:dbg_x86_6.11.1.404.msi,請注意其中的x86或x64的描述。

二、配置windbg
打開軟件,選擇File->Symbol File Path,設置路徑地址为:srv*c:\symbols*http://msdl.microsoft.com/download/symbols

三、關閉windbg窗口,執行cmd,進入windbg的安裝目錄,使用adplus.vbs設置iis應用程序池的監控。

adplus -crash -p 4456 -fullonfirst -o g:\debug -quiet

参數說明:-crash,告訴adplus,是調試崩溃。
-p 4456,指定iis應用程序池的windows進程號,如果不清楚所調試應用程序池的進程號,可以在cmd下使用iisapp查看。
-fullonfirst,第一次崩溃的時候,記錄詳細日志。
-o g:\debug,設置日志輸出目錄
-quiet,靜默模式

關於adplus的更多参數,可以查閱csdn的相關資料。

四、根據以上圖片的顯示,adplus已經成功運行,可以看到,其實adplus調用最終執行的是另外一個程序cdb.exe,adplus只是一個vbs腳本。然後等待應用程序池崩溃吧,只需要在第一次崩溃結束後,使用windbg分析由adplus(cdb.exe)產生的日志即可。

五、分析日志

分析日志前,請把C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\加入到環境變量的path中。也可以把這個目錄下的sos.dll复制到windbg的安裝目錄。

使用windbg打開g:\debug目錄下的dmp文件,通常崩溃記錄在所有日志文件中,較靠後的文件。

打開dmp文件後,執行

kb
.load sos
!clrstack

通常的asp.net異常,就能在其中找出問題所在了,我所碰到的此bug,是因为一個小遞歸程序導致的。

你可能感兴趣的:(使用windbg調試iis應用程序池崩溃的asp.net 2.0 bug.)