【发布时间】:2013-10-17 18:26:17
【问题描述】:
我想知道我的应用程序“在野外”发生的所有崩溃情况。我们可以使用AppDomain.CurrentDomain.UnhandledException 轻松捕获托管异常。
有时我们会在非托管代码中发生崩溃(通过我们自己与本机库的交互,或者有时是由于滥用 monomac 或 monomac 本身的问题)。我也想知道这些什么时候发生。
我已绑定plcrashreporter 框架并将其添加到我的应用程序中。我已经阅读了discussion 使用崩溃报告器和Xamarin.iOS 应用程序并实现了workaround。
到目前为止,一切都很好 - 我可以使用崩溃报告器并且我的应用程序运行良好。但是,我似乎受限于实际捕获的信号。
例如,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。
有什么想法吗?
【问题讨论】:
标签: mono xamarin monomac xamarin.mac plcrashreporter