mono - 在 OS X 上记录运行时崩溃

标签 mono xamarin monomac xamarin.mac plcrashreporter

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

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

我已绑定(bind)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。

有什么想法吗?

最佳答案

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

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

关于mono - 在 OS X 上记录运行时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19434404/

相关文章:

c# - 使用绑定(bind)作为 ConverterParameter

ios - 如何知道 xamarin iOS 中当前的 Storyboard名称?

c# - 导航返回后,菜单项未显示在 Xamarin.Forms 中

c# - MonoMac/Xamarin.Mac 上的 PCLStorage - NotImplementedException?

mono - 为 MIPS 交叉编译 Mono 框架 3.0.6+

ssl - Xamarin 跨平台证书固定

.net - MonoDevelop调试时读取环境变量

c# - Visual Studio Code : Using Mono and enabling IntelliSense

c# - NSOutlineView 的突出显示行

c# - 如何设置 Xamarin MonoMac 项目,使其构建输出 .app 包而不是 .exe?