2010-06-22 38 views
3

有沒有辦法找到從應用程序外部.NET代碼捕獲的異常?如何在生產機器上嗅探捕獲的.NET異常?

我發現3D派對API拋出一個異常,並抑制它(我看到perf計數器上升)。

但它不顯示它在跟蹤(我試過sysinternals dbgView)。

什麼工具可以顯示捕獲的異常?

+0

FYI ...一些正常的方法(如Response.End)會拋出異常,因此perfmon中遞增的異常計數並不總是很差。 – David 2010-06-23 03:23:37

+0

我沒有明白你的觀點。我同意這並不壞。我只需要知道它是什麼,並將它推到API開發人員面前,因爲他們不幫助。而這個例外使得整個應用程序,我花了5個星期無用.....呃..解釋? – 2010-06-23 09:19:07

回答

2

在這種情況下,我總是轉向的工具是WinDBG。根據進程的位數,下載32bit version64bit version

由於一些蹩腳的原因,最新版本沒有直接下載鏈接(僅在SDK中可用),因此請跳至「以前的版本」部分並獲取最新的版本。安裝並執行以下操作後

負載的WinDBG:

  1. 文件 - >附加到一個進程(F6)
  2. 選擇目標進程,然後單擊「打開」
  3. 在控制檯中輸入以下:
    • .loadby sos mscorwks(此加載.NET調試器擴展)
    • sxe clr(告訴調試到b reak上託管異常)
    • g(GO!)
  4. 運行過程,直到發生異常。
  5. 調試器將中斷,此時輸入!pe以查看異常詳細信息。

!clrstack命令有助於查看託管堆棧或嘗試!dumpstack以包含本地調用。

如果調試程序在您不關心的異常處停止,只需再次點擊'g',直到找到想要查看的異常。

!help命令將顯示所有可用的.NET擴展,如果您想深入挖掘,我強烈建議使用Tess Ferrandez's blog

1

您可以使用visual studio中的遠程調試器附加進程,並在發生異常時將其配置爲中斷嗎?

+0

我不確定它會中斷。它是發佈代碼,異常會在3d party API代碼中引發。 – 2010-06-22 23:28:33