【问题标题】:Logging runtime crashes in mono on OS X在 OS X 上以单声道记录运行时崩溃
【发布时间】:2013-10-17 18:26:17
【问题描述】:

我想知道我的应用程序“在野外”发生的所有崩溃情况。我们可以使用AppDomain.CurrentDomain.UnhandledException 轻松捕获托管异常。

有时我们会在非托管代码中发生崩溃(通过我们自己与本机库的交互,或者有时是由于滥用 monomac 或 monomac 本身的问题)。我也想知道这些什么时候发生。

我已绑定plcrashreporter 框架并将其添加到我的应用程序中。我已经阅读了discussion 使用崩溃报告器和Xamarin.iOS 应用程序并实现了workaround

到目前为止,一切都很好 - 我可以使用崩溃报告器并且我的应用程序运行良好。但是,我似乎受限于实际捕获的信号。

例如,SIGILLSIGABRT 都被崩溃报告者捕获。崩溃报告会写入磁盘,并且可以在应用下次启动时读回。

但是,SIGSEGVSIGBUS 不会被抓住。相反,我将堆栈跟踪连同以下内容一起写入控制台:

=================================================================
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


    【解决方案1】:

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

    由于我们只对实时错误感兴趣,因此我们可以用#IF DEBUG 包围代码以启用PLCrashReporter

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多