4

在这个问题之后:
C#中的良好崩溃报告库

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

编辑:这似乎是这个问题的副本

4

7 回答 7

3

请参阅Stack Overflow 上自动获取 Unix 系统上的堆栈跟踪。

于 2008-09-08T11:51:17.257 回答
2

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

于 2008-09-08T07:26:02.997 回答
1

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

于 2008-09-08T07:32:32.217 回答
0

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

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

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

int j = *i

到:

int j = i[2];

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

于 2008-09-10T14:42:38.203 回答
0

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

谢谢。

于 2008-09-11T17:33:30.453 回答
0

@马丁

我为 x86 做架构验证,所以我对处理器提供的架构非常熟悉,但对它的使用方式非常不熟悉。这就是我发表评论的依据。如果可以指望 CR2 给出正确的答案,那我就更正了。

于 2008-09-11T18:07:23.053 回答
0

内森,我并没有坚持认为你是不正确的;我只是说,在我(有限的)Linux 经验中,段基数始终为零。也许这对我来说是个好问题……

于 2008-09-12T00:57:18.327 回答