我想知道我的应用程序“在野外”的任何和所有崩溃。我们可以使用AppDomain.CurrentDomain.UnhandledException
轻松捕获托管异常。
偶尔我们会在非托管代码中崩溃(通过我们自己与本机库的交互,或者有时是因为滥用monomac或monomac本身的问题)。我想知道这些事情何时发生。
我绑定了plcrashreporter框架并将其添加到我的应用中。我在Xamarin.iOS
个应用程序中使用崩溃记者阅读了discussion并实施了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。
有什么想法吗?
答案 0 :(得分:1)
只有在连接调试器的情况下运行应用程序时才需要删除和重新分配SIGSEGV
和SIGBUS
处理程序的解决方法
由于我们只对实时错误感兴趣,因此我们可以围绕代码使用PLCrashReporter
启用#IF DEBUG
。