2010-09-14 17 views
1

我有一個windows服務,它間歇性地拋出一個有時會導致SQLConnection失敗的異常,而其他時間則會完全中止服務。它在客戶的網站上運行。帶SOS的Windbg,停在正確的異常處

我已經計劃使用Windbg + SOS來獲取崩潰轉儲,以便我可以在自己的閒暇時間進行調試。

但是,在我第一次嘗試時,調試器在服務遇到第一次機會異常時被暫停,該異常在代碼中被捕獲和處理(如我使用sxe clr命令)。

幫助文件似乎暗示我使用sxd clr而不是sxe clr來捕獲第二個更改異常,而不是第一次機會異常。

然而,在我的測試中,sxd clr命令正在處理生成的捕獲和處理的異常,與引發的異常(但未捕獲)完全相同,即將其記錄並忽略。

這種行爲,不停止拋出的異常,可能是因爲我在我的代碼中顯式拋出了異常,或者是否所有的clr異常都無法使用sxd命令暫停調試器?我應該使用不同的命令嗎?

其次,由於WinDBG的不特異性識別CLR的錯誤,是可以告訴它只是在一個特定的,未處理的,異常停止(即出現InvalidOperationException)

回答

1

這可能是更容易只是使用ADPlus創建轉儲文件。 This article演示瞭如何使用adplus爲特定的.NET異常創建小轉儲。

+0

謝謝,我會檢查出來 – johnc 2010-09-14 03:49:08

+0

請記住,在最新版本的WinDbg中,adplus.vbs被替換爲adplus.exe。我在新版本中遇到了一些問題,因此您可能需要使用舊版本,該版本仍包含在內(重命名爲adplus_old.vbs)。 – 2010-09-14 03:53:43

+0

很好,謝謝 – johnc 2010-09-14 04:36:42