C for Linux中的崩溃报告

时间:2008-09-08 06:53:06

标签: c linux crashrpt

关注这个问题:
Good crash reporting library in c#

是否有像CrashRpt.dll这样的库在Linux上执行相同的操作?也就是说,生成包含核心转储和任何必要环境的故障报告,并通知开发人员?

编辑:这似乎与this question

重复

7 个答案:

答案 0 :(得分:3)

请参阅Stack Overflow上的 Getting stack traces on Unix systems, automatically

答案 1 :(得分:2)

使用调试符号编译代码,在shell中输入unlimit coredumpsize,您将在与二进制文件相同的文件夹中获得coredump。使用gdb / ddd - 首先打开程序,然后打开核心转储。您可以查看this以获取更多信息。

答案 2 :(得分:1)

@Ionut
这会处理生成核心转储,但是当其他用户崩溃时,它不会处理通知开发人员。

答案 3 :(得分:0)

注意:x86 seg-fault崩溃中有两个有趣的寄存器。

第一个 EIP ,指定发生异常的代码地址。在RichQ的回答中,他使用addr2line来显示与崩溃地址对应的源代码行。但EIP可能无效;如果你调用一个null的函数指针,它可以是0x00000000,如果你破坏了你的调用堆栈,那么返回可以将任何随机值弹出到EIP中。

第二个 CR2 ,指定导致分段错误的数据地址。在RichQ的例子中,他将i设置为空指针,然后访问它。在这种情况下,CR2将是0x00000000。但如果你改变了:

int j = *i

为:

int j = i[2];

然后您尝试访问地址0x00000008,这就是CR2中的内容。

答案 4 :(得分:0)

内森,在什么情况下基数非零?在我5年的Linux应用程序开发中,我从未见过这种情况。

感谢。

答案 5 :(得分:0)

@马丁

我为x86进行架构验证,因此我非常熟悉处理器提供的架构,但非常熟悉它的使用方式。这就是我的评论基础。如果可以指望CR2给出正确答案,那么我就会纠正。

答案 6 :(得分:0)

内森,我并不坚持你是不正确的;我只是说,在我(Linux)的经验中,细分基础始终为零。也许这对我来说是一个很好的问题......