2010-10-27 107 views
1

我在收集有關在我的代碼中生成(很少)未處理的異常的信息時遇到了一些問題。我已經建立了一個非常標準的處理程序。只有異常堆棧跟蹤的最後一行出現

在主,我有:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ExceptionProcessor); 

而且處理函數是:

public void ExceptionProcessor(object sender, UnhandledExceptionEventArgs e) 
{ 
    Log(((Exception)e.ExceptionObject).StackTrace); 
} 

但所有我曾經得到的是一條線(並不總是相同的一個)。谷歌搜索顯示,這些行深入.Net框架庫,並且意味着是堆棧跟蹤的最後一行。所以,關於我的代碼的所有實際有用的信息都丟失了。有誰知道什麼可能導致這種行爲?

我最近得到的這條線說它不能將System.Threading.AutoResetEvent強制轉換爲System.Threading._ThreadPoolWaitOrTimerCallback。

謝謝。

+3

我可能問的很明顯,但是有沒有InnerException? – 2010-10-27 13:05:25

+0

你正在編譯爲Debug或Release模式嗎?編譯器可能會內聯你的一些函數。您的堆棧跟蹤中也會丟失行號。 – 2010-10-27 13:06:03

+0

@Dave我在發佈時丟失了行數,但是當我捕獲正常的異常時,我不會丟失任何堆棧跟蹤,這種行爲對於UnhandledException情況是唯一的。 – United 2010-10-27 13:12:08

回答

0

這很奇怪。 e.ExceptionObject的類型是什麼?這是一個自定義異常嗎?

我敢打賭,有一些發生的情況下您的實際利益異常被抓,然後某處重新拋出...

+0

該類型是InvalidCastException(默認.Net之一)。而且我也有同樣的想法重新拋出:)我已經測試了它,並且在創建新的堆棧頂端(在我的代碼級別)重新拋出了較低的層次。我所看到的是相反的,只有最深層次的保存。 – United 2010-10-27 13:22:05

0

我有時用e.tostring()寫全異常詳細信息進入登錄。試試吧..

0

你記錄內部異常嗎?每個例外都有InnerException屬性可能包含另一個異常。

相關問題