2010-05-07 46 views
9

我正在尋找一種方法來檢索當前異常,而不必將其作爲變量傳遞。如何在不傳遞變量的情況下獲取當前異常?

假設下面的代碼

public void MakeItFail() 
{ 
    try 
    { 
     throw new FailException(); 
    } 
    catch // Yes I'm aware that this shouldn't be done, but I don't want to go through all the code base and change it 
    { 
     ShowMessage("An error occured"); 
    } 
} 

public void ShowMessage(string message) 
{ 
    // How can I retrieve the exception here 
} 

在監視窗口,我可以用$例外獲取當前異常。是否有相當的代碼?

+2

你在想什麼是壞的。很壞。停下來。不要這樣做。不,不適合你。別。抓取框架設計指南的副本並閱讀異常處理部分。 – Will 2010-05-07 13:41:31

+1

@會 - 我不認爲你想重寫他們的應用程序? – ChaosPandion 2010-05-07 13:45:04

+0

我不知道代碼庫有多大,但是我強烈懷疑返回的時間並且修復所有catch子句的時間少於實施和測試解決方法hack所需的時間,甚至是時間折扣需要從長遠來看保持它。 – 2010-05-07 13:51:30

回答

8

不,沒有。

您需要使用參數。

+0

我已經閱讀了一些使用ICorDebugThread.GetCurrentException()的可能但很難的方法,但我沒有嘗試它。 – 2010-05-07 15:16:27

+0

這是非託管調試器API的一部分。您只能在調試器中暫停的進程上使用它。由於進程無法自行調試,因此您需要編寫第二個進程來調試第一個進程並調用該API。 – SLaks 2010-05-07 15:18:13

+1

我不會去那個兔子洞:P – 2010-05-07 15:22:11

3

嘗試訂閱此事件時,您第一次加載您的應用程序。

AppDomain.CurrentDomain.FirstChanceException += (s, e) => 
{ 
    ShowMessage(e.Exception.Message); 
}; 
+0

aww that.net 4 only。這是一個現有的程序,我們不會將它轉換爲4.0尚未 – 2010-05-07 13:27:46

+2

@Pierre - 只是另一個原因升級的好理由... – ChaosPandion 2010-05-07 13:29:32

+2

偉大的,另一個安全漏洞... – 2010-05-07 17:28:16

相關問題