Linux版C中的崩溃报告
遵循以下问题:
C#中的良好崩溃报告库
是否有像CrashRpt.dll这样的库在Linux上具有相同的功能?也就是说,生成包括核心转储和任何必要环境的故障报告,并通知开发人员吗?
编辑:这似乎是这个问题的重复
解决方案
回答
使用调试符号编译代码,在shell中输入unlimit coredumpsize,我们将在与二进制文件相同的文件夹中获得coredump。使用gdb / ddd首先打开程序,然后打开核心转储。我们可以查看此以获取其他信息。
回答
@Ionut
这可以处理核心转储,但不能处理其他用户崩溃时通知开发人员的情况。
回答
请参阅自动在堆栈溢出上在Unix系统上获取堆栈跟踪。
回答
注意:在x86 seg-fault崩溃中有两个有趣的寄存器。
第一个EIP指定发生异常的代码地址。在RichQ的答案中,他使用addr2line显示与崩溃地址相对应的源代码行。但是EIP可能无效;如果调用的函数指针为null,则它可以为0x00000000,并且如果破坏了调用堆栈,则返回值可以将任何随机值弹出到EIP中。
第二个CR2指定导致分段错误的数据地址。在RichQ的示例中,他将i设置为空指针,然后对其进行访问。在这种情况下,CR2为0x00000000。但是,如果我们更改:
int j = *i
到:
int j = i[2];
然后,我们尝试访问地址" 0x00000008",这就是在CR2中找到的地址。
回答
内森,在什么情况下某个细分受众群的基数为非零?我在Linux应用程序开发的5年中从未见过这种情况。
谢谢。
回答
@马丁
我对x86进行了架构验证,因此我对处理器提供的架构非常熟悉,但是对它的使用方式却非常陌生。这就是我的评论依据。如果可以指望CR2给出正确的答案,那我就更正了。
回答
内森,我并不是要坚持你是不对的。我只是说,在我(有限的)Linux经验中,段基始终为零。也许这是我要问的一个好问题...