ios - 在 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
...
异常处理程序类似于这篇文章或这篇文章。它使用NSSetUncaughtExceptionHandler
、AppDomain.CurrentDomain.UnhandledException
和TaskScheduler.UnobservedTaskException
。AsyncSynchronizationContext.ExceptionCaught
我没有FinishedLaunching()
像示例中那样初始化,但我认为这不是原因。
是否可以捕获EXC_CRASH (SIGABRT)
异常Xamarin.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
推荐阅读
- ios - Cordova HttpClient 调用在 IOS 设备中失败,但在 Android 中有效
- javascript - 将图像动态保存到 PDF 模板
- excel - Power Query - 找不到记录的字段“xxx”
- scala - 与蒂卡合影
- sql-server - 如何为 SQL Server DB 项目指定版本号(在 Dacpac 上)
- sql-server - 此 SQL 中发生了什么:`SELECT CONVERT(CHAR(10), GETDATE(),103)`
- hibernate - Bean 名称“用户”的 BindingResult 和普通目标对象都不能用作请求属性 HTTP 状态 500
- python - 多处理 Linux 和 Windows - 传递变量
- javascript - 按另一个数组中的元素过滤数组时出现奇怪的数学
- ios - 在 xcconfig 文件中定义 url 的问题