3

我想知道我的应用程序“在野外”发生的任何和所有崩溃。我们可以使用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。

有任何想法吗?

4

1 回答 1

1

仅当应用程序在附加调试器的情况下运行时才需要删除和重新分配SIGSEGV和处理程序的解决方法SIGBUS

由于我们只对实时错误感兴趣,我们可以将代码括起来以PLCrashReporter启用#IF DEBUG.

于 2013-10-22T15:42:31.227 回答