如何在Xamarin中可靠地捕获*所有*iOS异常?

如何在Xamarin中可靠地捕获*所有*iOS异常?,xamarin,xamarin.ios,hockeyapp,mobile-center,visual-studio-app-center,Xamarin,Xamarin.ios,Hockeyapp,Mobile Center,Visual Studio App Center,描述如何在iOS中处理异常 Runtime.MarshalManagedException += (object sender, MarshalManagedExceptionEventArgs args) => { Console.WriteLine ("Marshaling managed exception"); Console.WriteLine (" Exception: {0}", args.Exception); Console.WriteLin

描述如何在iOS中处理异常

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);
};
此外,我还看到其他Xamarin示例在AppDelegate中使用此选项

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


异常类型是什么(如果多于托管/非托管),以及如何捕获所有异常

不言而喻,“全局”异常处理程序不应取代从您预期会看到问题的代码块中正确捕获预期或预期异常的方法(可能是因为您使用了Parralel库,或任何类型的线程复杂性)

“全局”异常处理程序(在我看来)应该用于捕获在开发和测试期间未能发现的任何内容。就我个人而言,我将它们写入应用程序中的日志文件,并将它们作为“关键异常”处理,因为它们会导致应用程序崩溃。我的首选方法是将事件分配给“AppDomain.CurrentDomain.UnhandledException”

也就是说,在开发、测试和生产过程中,如果应用程序的用户碰巧将“诊断报告”设置为on,则您将能够访问苹果的异常日志。这些可能很有用,但请记住,它们将为您提供“本机”堆栈跟踪,并且不会包含任何特定于xamarin的内容。所以,把它们和一撮盐一起吃

至于您的问题,分配给“AppDomain.CurrentDomain.UnhandledException”将捕获您未执行或自己看到的所有异常。您不需要明确地知道类型,因为堆栈跟踪显然会告诉您它们是什么。另外值得注意的是,你只能使用该事件记录信息或执行非常基本的功能,因为无论你做什么,应用程序都将关闭。因此,使用它来记录尽可能多的有关应用程序的信息


当前,如果应用程序遇到未处理的异常事件,则无法阻止其关闭。

您是否尝试过围绕主功能进行尝试?静态void Main(字符串[]args)-应位于Main.cs文件中。我不会推荐任何东西,但它应该有效;)