2012-04-17 83 views
-1

我使用所有託管代碼在Windows 7 32位計算機上的Visual Studio 10中編寫了一個簡單的控制檯應用程序。它工作在調試模式很好,但是當我把它部署到另一臺機器並運行它,我得到的消息,Try-Catch不會捕獲異常

[my assembly] has encountered a problem and needs to close. We are sorry for the inconvenience. 

...然後它會產生一個神祕的錯誤報告,我無法想象找到有用的。事情是這樣的:異常發生在一個try-catch語句內,該語句旨在正常處理錯誤;但是,這個例外似乎沒有被發現。

這怎麼可能?我該如何解決它?

+2

你在做什麼?您可能會在Catch子句中生成另一個錯誤。 – Servy 2012-04-17 16:28:46

+2

你可以1)分享錯誤2)檢查事件日誌,看看有什麼錯誤,並分享? – 2012-04-17 16:28:52

+0

包裝所有代碼的try catch以查找引發異常的位置。 – 2012-04-17 16:30:01

回答

2

要麼異常是從一個diferent發生在代碼中引發,否則你不要在catch分支

的「神祕」的錯誤消息列出特定類型的異常(或其父類型之一)實際上是設計用來幫助你發現:出了什麼問題(異常的類型),它發生在哪裏(堆棧跟蹤)。你應該學會閱讀/「decypher」它

+0

它應該是一個評論。 – Pankaj 2012-04-17 16:31:14

+0

...或者出於某種原因,你會得到一個不可捕捉的異常,比如StackOverflowException。 – 2012-04-17 16:31:14

+0

@PankajGarg - 你能解釋一下爲什麼嗎?隨着OP提供的詳細程度,我認爲這是一個合理的答案 – Attila 2012-04-17 16:32:33

1

就像阿提拉說,它可能是從另一個地方拋出。您應該將其類型設置爲Exception,因爲它是一般的,如果錯誤在您認爲是的情況下被拋出,那麼它肯定會在該捕獲中結束。一旦理解了問題,您可以將類型調整爲更具體的內容。

而不是優雅地處理它,首先嚐試將錯誤消息打印到控制檯,以查看問題可能是什麼。

如果沒有被捕獲,它不會被從try裏面拋出,請確保所有有問題的代碼都被包裝好。

+0

一般而言'異常'捕捉是不被接受的,因爲它可以捕捉像內存不足異常這樣的異常,你不能對它做太多的處理 – Attila 2012-04-17 16:40:51

+0

是的你是對的。我的想法是確保它被捕獲,然後打印出錯誤以解決問題,然後相應地更改異常類型以捕獲並處理特定問題。 – PaulG 2012-04-17 16:45:13