首页 > 解决方案 > 在 Xamarin 中捕获 EXC_CRASH (SIGABRT) 异常

问题描述

我已经编写了我的自定义异常处理程序,Xamarin.Forms并且我注意到并非所有异常都被捕获。例如,这个不是(取自Xcode > Devices and Simulators 中的设备日志):

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Application Specific Information:
abort() called

Filtered syslog:
None found

Thread 0 name:  tid_303  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x0000000180d3d2e0 __pthread_kill + 8
1   libsystem_pthread.dylib         0x0000000180ede288 pthread_kill$VARIANT$mp + 376
2   libsystem_c.dylib               0x0000000180cabdb0 __abort + 152
...

异常处理程序类似于这篇文章这篇文章。它使用NSSetUncaughtExceptionHandlerAppDomain.CurrentDomain.UnhandledExceptionTaskScheduler.UnobservedTaskExceptionAsyncSynchronizationContext.ExceptionCaught

我没有FinishedLaunching()像示例中那样初始化,但我认为这不是原因。

是否可以捕获EXC_CRASH (SIGABRT)异常Xamarin.iOS?如果是,怎么做?

标签: iosxamarinexceptionxamarin.ios

解决方案


您可能想要查看使用运行时框架的 Xamarin.iOS异常封送处理以及如何使用构建时间标志 ( mtouch) 将处理程序安装到应用程序中:

例子:

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

触控选项:

--marshal-objectivec-exceptions=
default
unwindmanagedcode
throwmanagedexception
abort
disable

回复:https ://docs.microsoft.com/en-us/xamarin/ios/platform/exception-marshaling


推荐阅读