2012-07-31 49 views
-1

用戶報告說,他們從沒有任何錯誤的應用程序退出,我有很多這樣的錯誤在事件查看器:用戶退出沒有任何異常

事件類型clr20r3,P1 MAIN.EXE,P2 1.0.0.0,P3 4f6b05ad,P4 system.drawing,P5 2.0.0.0,P6 4333aeaf,P7 17e,P8 20,P9 system.argumentexception,P10 NIL。

的EventType clr20r3,P1 MAIN.EXE,P2 1.0.0.0,P3 4f6b05ad,P4 Microsoft.VisualBasic程序,P5 8.0.0.0,P6 4333d6d8,P7 5E,P8 1E1,P9 34ssps20bdj3nj0wmit5kamzhvglfzcc,P10 NIL。

的EventType clr20r3,P1 MAIN.EXE,P2 1.0.0.0,P3 4f6b05ad,P4 Microsoft.VisualBasic程序,P5 8.0.0.0,P6 4333d6d8,P7 85,P8 A2,P9 system.componentmodel.win32, P10 NIL。

我們在Windows Server 2003上安裝了終端服務器,並且在上述一天中有大約500個錯誤。

有什麼建議嗎?

回答

2

它看起來像你正在得到一些未處理的例外。如果.NET應用程序遇到未被Try/Catch塊捕獲的異常,並且沒有調試器顯示它,則應用程序將終止。

添加一些異常處理並記錄到您的應用程序,以便您可以看到異常的所有細節。當您顯示或記錄它時,我建議使用異常對象的ToString方法,因爲它會顯示異常及其所有內部異常的異常類型,消息和堆棧跟蹤。得到這些信息後,應該更容易確定發生了什麼問題以及如何解決問題。

要添加異常處理,如果您正在使用VB的應用程序框架,請轉至項目屬性頁面的「應用程序」選項卡並單擊「查看應用程序事件」按鈕。在MyApplication類,添加事件處理程序爲UnhandledException事件,如:

Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) Handles Me.UnhandledException 
    MyLog.WriteEntry(e.Exception.ToString()) 
End Sub 

但是,如果你不使用的應用程序框架,去你的應用程序的入口點求佛(Sub Main),把一個嘗試圍繞在該方法的全部代碼,如/ Catch塊:

Public Sub Main 
    Try 
     ' ... 
    Catch ex As Exception 
     MyLog.WriteEntry(ex.ToString()) 
    End Try 
End Sub 

這些示例假設你有一個MyLog類與共享WriteEntry方法。顯然你需要在這樣的一個類中實現你自己的日誌記錄。

+0

如果是用戶模式的應用程序,應該有一個默認的頂層異常處理程序顯示錯誤。如果不是,請檢查以確保您不覆蓋默認值並掛接正在吞服該錯誤的新的頂級異常處理程序。但是,是的,它實現日誌記錄絕不會傷害......只是不要通過將主要方法封裝在try/catch塊中來實現,而是使用非常規異常掛鉤,這就是它的用處。 – 2012-07-31 17:55:17

+0

@CodyGray通過「未處理的異常掛鉤」,你是指'MyApplication.UnhandledException'事件? – 2012-07-31 17:58:30

+0

是的,就是那個。這是記錄錯誤以進行調試的最佳方式。將空白捕獲塊中的所有內容都包含在內,只是隱藏了錯誤,並希望從任何未知的異常中恢復,這是不負責任的樂觀主義。我在之前討論過[這裏](http://stackoverflow.com/a/4827646/366904)。 – 2012-08-01 21:06:44