2011-09-26 96 views
4

我有一個相當大的.NET解決方案,具有較差的異常處理。原作者的意思很好,捕獲特定類型的異常而不是基本的異常類,但是,這導致我可以計算的地方超過了某個類型的異常被拋出但沒有被捕獲到的地方,並且使軟件不可靠。如何執行代碼分析以確定解決方案中的異常類型可以拋出但未被捕獲?查找未處理的異常 - .NET

+0

EceptionHunter是應該幫助你的代碼的邊界情況。 http://www.red-gate.com/products/dotnet-development/exception-hunter/我從來沒有使用它,但我喜歡他們的分析器。 –

回答

2

您可以添加一個全局異常處理程序,該異常處理程序記錄包含堆棧跟蹤的異常,併爲用戶提供一個很好的錯誤對話框。您可以使用堆棧跟蹤來識別代碼中會產生錯誤的地方,並更好地處理這些情況。儘可能地記錄日誌。

你怎麼做,取決於平臺(Web窗體,MVC,的WinForms,WPF,...?)

而且,強調整個代碼庫的錯誤處理進行了深入的代碼審查可能趕上許多錯誤在它們表現爲用戶錯誤之前。

+1

用戶沒有「很好」的錯誤對話框:P。 – albertjan

+3

那麼,任何事情比默認的未處理的異常對話框(對於Windows應用程序)或YSOD的Web應用程序更好:-) – driis

+0

除了日誌記錄,這就是我所做的。我真的不明白在給定EventLog,ETW和小型轉儲的Windows桌面應用程序中,錯誤記錄到文件或多個文件。 –

1

這就是我如何處理它們。在我的Program.csMain方法中,我設置了事件處理。之後,您將這些事件放入您想要的代碼中。

Application.ThreadException += Form1_UIThreadException; 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 

編輯:這是爲非基於Web的應用程序。

+0

假設Windows Forms是平臺。 – driis

0

任何未捕獲的異常都是未處理的。好消息是您可以訂閱該AppDomain.CurrentDomain.UnhandledException事件。

這將處理任何未捕獲的異常。

如何執行代碼分析以確定解決方案中的異常類型可以拋出但未被捕獲的位置?

像StyleCop這樣的程序會突出顯示可能的未處理的異常。

0

除了答案中提到的內容外,您還可以使用Pex等工具。它可以讓你自動創建一個測試套件,涵蓋了很多的

Take a look