2012-04-11 44 views
0

我有一個dll庫,可以幫助減少從項目複製的樣板代碼的數量。有一個定時器在dll中運行,以通過RPC維護與我們機器的連接。當我調試我的項目並打破RPC連接時,我的代碼優雅地從dll庫中拋出斷開連接事件,並且我的主窗體捕獲事件並進行適當處理。從DLL中未處理的異常 - 僅在發佈版本中顯示

現在,構建發佈。當我斷開RPC連接時,一個未處理的異常從庫中拋出,顯然沒有被捕獲到其他地方。

奇怪的部分是引發異常的代碼在計時器中,調用都被包裝在try/catch塊中,並且catch塊吞下異常並執行其他清理工作。

我不明白在調試模式下一切都很好,但在發佈它不是。那部分對我來說沒有意義。我試着查看異常對象並在其上設置處理屬性,但它不可用。這是我看到的正常行爲嗎?

我剛剛開始在我的項目中使用衆多庫來保持我的解決方案更加精簡併易於遵循。希望這不是我沒有考慮過的圖書館的問題。

+0

您需要縮小問題範圍。嘗試添加一些日誌功能,以便找出引發異常的位置。 – squelos 2012-04-11 14:55:46

回答

2

有一些類型的異常未在Try-Catch in Release模式中捕獲,例如發生在不同線程中的異常。嘗試在主窗體中處理Application.ThreadException事件。

您還可以處理Application.CurrentDomain.UnhandledException以確保捕獲所有未處理的異常。

+0

確保您也連接到Application.CurrentDomain.UnhandledException事件,就像上面顯示的鏈接中的示例一樣。 – davisoa 2012-04-11 15:26:52

+0

我通常不會參加這些活動。我會給它一個鏡頭。如果這是一個與線程相關的異常,那麼調試器是否控制線程上下文,這就是爲什麼當我單步執行代碼時看不到它? – TWood 2012-04-11 17:31:35

+0

好吧,我爲threadexception添加了一個處理程序,但我的問題仍未被它捕獲,並且未處理的異常處理程序正常關閉了我的應用程序。爲了解決這個問題,我必須將我的課程從我的dll中移出,然後返回到我的主項目中。然後,我每次發生錯誤時都能看到錯誤。 – TWood 2012-04-24 15:27:22

相關問題