1

This link, 나는Xamarin에서 모든 * iOS 예외를 안정적으로 캡처하려면 어떻게합니까?

AppDomain.CurrentDomain.UnhandledException += (sender, e) => { 
try 
{ 
    var exception = ((Exception)e.ExceptionObject).GetBaseException(); 
    Console.WriteLine("**SPORT UNHANDLED EXCEPTION**\n\n" + exception); 
    exception.Track(); 
    } 
    catch 
    { 
    throw; 
    } 
}; 

질문

를 제외하고 어떤 다른 자 마린 샘플은 AppDelegate에이를 사용 보았다 또한

Runtime.MarshalManagedException += (object sender, MarshalManagedExceptionEventArgs args) => 
{ 
    Console.WriteLine ("Marshaling managed exception"); 
    Console.WriteLine (" Exception: {0}", args.Exception); 
    Console.WriteLine (" Mode: {0}", args.ExceptionMode); 

}; 
Runtime.MarshalObjectiveCException += (object sender, MarshalObjectiveCExceptionEventArgs args) => 
{ 
    Console.WriteLine ("Marshaling Objective-C exception"); 
    Console.WriteLine (" Exception: {0}", args.Exception); 
    Console.WriteLine (" Mode: {0}", args.ExceptionMode); 
}; 

아이폰 OS

에서 예외를 처리하는 방법에 대해 설명합니다 유형 (Managed/Unmanaged보다 많은 경우) 및 모든 것을 캡처하는 방법은 무엇입니까?

+0

주 기능을 시도해 보셨습니까? static void Main (string [] args) - Main.cs 파일에 있어야합니다. 추천 할만한 것은 없지만 효과가있을 것입니다.) – Lepidopteron

답변

0

'글로벌'예외 처리기가 문제를 볼 것으로 예상되는 코드 블록에서 예상되거나 예상되는 예외를 올바르게 잡아내는 대체품이되어서는 안됩니다 (아마도 parrallel 라이브러리를 사용했거나 종류의 스레드 복잡성).

'글로벌'예외 처리기는 내 의견으로는 개발 및 테스트 중에 발견하지 못한 것을 잡아내는 데 사용해야합니다. 개인적으로이 파일을 응용 프로그램의 로그 파일에 기록하고 응용 프로그램을 중단시킬 수있는 '중요 예외'로 처리합니다. 내가 선호하는 방법은 'AppDomain.CurrentDomain.UnhandledException'에 이벤트를 할당하는 것입니다.

개발 중에는 테스트 중이며 프로덕션 중에 응용 프로그램 사용자에게 '진단보고'가 설정되어 있으면 사과 예외 로그에 액세스 할 수 있습니다. 이것들은 유용 할 수 있지만 '네이티브 (native)'스택 추적을 제공 할 것이고 xamarin에 특정한 것을 가질 수는 없다는 것을 명심하십시오. 그러므로 소금 한 덩어리로 그들을 가져 가라.

질문에 'AppDomain.CurrentDomain.UnhandledException'에 할당하면 수행하지 않았거나 혼자있는 모든 예외가 캡처됩니다. 스택 추적에서 명시 적으로 유형을 알 수 있으므로 유형을 명시 적으로 알 필요가 없습니다. 자신이하는 일과 관계없이 앱이 종료되므로 정보를 기록하거나 매우 기본적인 기능 만 수행 할 수있는 이벤트 만 사용할 수 있습니다. 따라서 가능한 한 응용 프로그램에 관한 많은 정보를 기록하십시오.

응용 프로그램이 처리되지 않은 이벤트에 도달하면 응용 프로그램이 닫히지 않도록 현재 불가능합니다.