如何在没有任何调试器的情况下在Ubuntu上调试Mono中的分段错误?

Lou*_*ron 2 c# mono segmentation-fault

我有一个应用程序,我最近拆分运行在单独的进程中,通过本地套接字相互通信.我希望通过提高稳定性将其拆分,因为核心"观察者"流程可以检测到故障并重新启动受影响的子流程.

但是,现在我的观察程序进程经常崩溃,只有消息"Segmentation Fault".我已经包围了try/catch块中的所有线程操作以尝试转储任何输出,但我仍然得到相同的结果.

我一直无法使调试器在MonoDevelop中工作(因此,如果没有这些重影问题,开发就很困难).

是不是Mono应该在托管环境中来防止这样的问题?有什么方法可以缩小问题的根源吗?

Rol*_*nge 8

分段错误必须(1)使用gdb进行调试.要使用gdb调试mono,首先需要阅读此内容.

完成后,启动程序,运行ps auxf以查找程序的pid,然后执行:

gdb program PID

这会将gdb附加到您的程序.您应该看到一个gdb提示符:

$ (gdb) 
Run Code Online (Sandbox Code Playgroud)

执行以下(从您现在应该阅读的链接):

$ (gdb) handle SIGXCPU SIG33 SIG35 SIGPWR nostop noprint
$ (gdb) continue
Run Code Online (Sandbox Code Playgroud)

现在等到你的程序停止响应.当发生这种情况时,返回gdb,你会发现你的程序已经停止在分段错误(SIGSEGV),你应该能够获得有关崩溃的更多信息.特别是这很有用:

$ (gdb) thread apply all backtrace
Run Code Online (Sandbox Code Playgroud)

这将显示所有线程的堆栈跟踪.

(1)您还可以使用更强大的方式来调用您的代码来调用Console.WriteLine.当其他一切都失败时,这是你最后的选择:)