2013-01-15 66 views
0

在我的MonoDroid應用程序中,當發生未處理的異常時,應用程序終止而沒有任何消息。如果我可以在本地設備上重現錯誤,我可以通過Visual Studio進行調試,而不會出現任何問題。未處理的異常處理

但是,在遠程設備上我堅持要求解決方案。

我已經在應用程序類中嘗試了以下內容,但它實際上並未寫入我的日誌文件,除非我通過Visual Studio中的調試器運行。

public override void OnCreate() 
    { 
     base.OnCreate();          
     AndroidEnvironment.UnhandledExceptionRaiser += new EventHandler<RaiseThrowableEventArgs>(AndroidEnvironment_UnhandledExceptionRaiser); 
    } 

    void AndroidEnvironment_UnhandledExceptionRaiser(object sender, RaiseThrowableEventArgs e) 
    { 
     // Write Log File 
    } 
+0

你能記住我的答案是正確的? @SpiritMachine承認他的答案不起作用。 –

回答

-1

嘗試是這樣的:

編輯:此代碼不能處理捕獲錯誤的。請參閱@Jim G.'s answer ....

就我個人而言,我會將錯誤處理本地化到您需要的位置。原因是,你不知道你的應用程序狀態會是什麼時候這個處理程序被招募 - 你可能沒有資源,你要做的處理...

2

我不同意@SpiritMachine's answer

黑白文檔tells us

注意:您可以不依賴AppDomain.UnhandledException事件作爲管理的例外是從來沒有未處理的MonoDroid的;它們總是在catch(Exception)塊內的Android /管理邊界處截獲。

相反,我建議您做到以下幾點:

AndroidEnvironment.UnhandledExceptionRaiser += (sender, args) => 
{ 
    // Do something... 
}; 
+0

謹慎闡述?我相信'AppDomain.CurrentDomain.UnhandledException'也適用於Monotouch和WP,使其成爲一個跨平臺的解決方案。 – manadart

+0

夠公平的。它確實發現了錯誤;你無法用它做任何事情 - 即使只是再次登錄。我無法刪除答案,因爲它已被接受,但是其中的建議持有 - 在本地處理。 – manadart

+0

「本地處理」 - 除了每個用戶操作(按鈕點擊等)都需要自己的try/catch,我不確定如何解釋。我是Xamarin的新手,但在其他任何.net情況下(web,winform等),至少有一種體面的方式可以說:「出現意想不到的事情;發生異常消息和堆棧軌跡開發人員「(或某些這樣的事情)。 android/xamarin中沒有這樣的機制嗎? – pettys