我想知道我的应用程序“在野外”发生的任何和所有崩溃。我们可以使用AppDomain.CurrentDomain.UnhandledException
.
有时我们会在非托管代码中崩溃(通过我们自己与本机库的交互,或者有时是由于滥用 monomac 或 monomac 本身的问题)。我也想知道这些什么时候发生。
我已经绑定了plcrashreporter框架并将其添加到我的应用程序中。我已经阅读了有关在应用程序中使用崩溃报告器的讨论Xamarin.iOS
并实施了解决方法。
到目前为止,一切都很好——我可以使用崩溃报告器并且我的应用程序运行良好。但是,我似乎受限于实际捕获的信号。
例如,SIGILL
两者SIGABRT
都被崩溃记者困住了。崩溃报告被写入磁盘,并且可以在应用程序下次启动时读回。
但是,SIGSEGV
不要SIGBUS
被抓住。相反,我得到了一个写入控制台的堆栈跟踪以及:
=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
所以看起来 Mac 上的情况与 iOS 上的情况并不完全相同。解决方法允许崩溃报告器运行,但当 Mono 从非托管代码获取 SIGSEGV 时,它似乎并没有引发 SIGABRT。
有任何想法吗?