核心转储未生成

时间:2011-07-24 19:49:17

标签: linux embedded-linux

我正在使用运行CentOS的PC作为其操作系统。 我也在使用相同的操作系统进行嵌入式工作。

在我的电脑上,通过更改:

,我成功地在分段故障上创建了核心转储文件
  1. 核心模式
  2. core_uses_pid
  3. ulimit -c unlimited
  4. sysctl -p
  5. 但是在嵌入式系统上没有任何作用 - 核心转储不会生成!可能是什么原因?

    如果重要,我想要转储的应用程序是用C ++编写的。

    如何在嵌入式系统上获取核心转储?


    我做了一个小崩溃程序,核心转储是从崩溃程序生成的,但不是我需要的! 所以问题不在于O.S,而在于具体的程序。 我发现在将它们发送到嵌入式系统之前我们剥离-g可执行文件/库文件。我对我的崩溃程序做了同样的事情,而且这个文件仍然产生核心转储。

3 个答案:

答案 0 :(得分:4)

您确定嵌入式系统上的内核支持核心转储吗?可以在内核版本(ref)中禁用该功能,在这种情况下,您可能必须使用google-coredumper之类的内容自行伪造。

答案 1 :(得分:0)

确定,

当我在计算机上检查程序时,我犯了一个小错误,我用另一个信号检查了它,而不是嵌入式系统。为什么自定义信号处理程序仍然存在问题,因此没有核心转储。 解决方案在其中一个链接中:

  

不幸的是,如果您的应用程序配备了自定义信号处理程序,则不会生成核心转储,因为它仅由默认信号处理程序生成。如果您的应用程序具有自定义信号处理程序,请在开始调试之前将其禁用,否则将不会生成核心转储。 Internet中的一些消息来源提到在异常发生后恢复信号处理程序内的默认信号处理程序,并在环回中再次发送它可以触发核心转储。在我做的测试中,它确实生成了一个核心转储,但我在核心转储中看到的唯一一件事是我的处理程序执行的代码(即调用signal和kill的代码),所以这对我没有帮助。也许在其他平台上这个技巧效果更好。

在我的平台上它确实有效 - 另一种解决方案是在信号处理程序中生成核心转储。我听说gcore可以做到这一点,使用windows core我的错误不兼容。

答案 2 :(得分:-1)

我见过两个可能的信息来源,这两个信息都指向/etc/security/limits.conf文件:

Linux Disable Core Dumps - 是的,我知道您要启用核心转储,但这有助于逆转 CentOS enabling core dumps - 另一个指向limits.conf的来源。

相关问题