2011-07-24 73 views
1

我正在运行CentOS作为其操作系统的PC上工作。 我也在嵌入式操作系统上工作。未生成核心转储

在我的电脑,我成功通过改变来创建分割故障核心转储文件:

  1. 核心图形
  2. core_uses_pid
  3. 的ulimit -c无限
  4. 的sysctl -p

但在嵌入式系统上没有任何工作 - 核心转储不会生成!可能是什么原因?

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

如何才能在嵌入式系统上获得核心转储?


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

+0

是您的程序setuid或setgid?如果是这样,'/ proc/sys/fs/suid_dumpable'的内容是什么? – Hasturkun

+0

我的计划是不setuid或setgid,如果你的意思是ls -l命令答案开始以S 和要求文件1 – davidbobo

+0

OK,另外,它使用'个seteuid()'或'setguid()'功能随时随地为?因为默认情况下这会使其不可打印。如果是,尝试做'回声2>的/ proc/SYS/FS/suid_dumpable'这可能使人们有可能进行核心转储 – Hasturkun

回答

4

您确定您的嵌入式系统上的内核支持核心转储吗?内核版本(ref)可以禁用该功能,在这种情况下,您可能必须使用类似google-coredumper的东西来伪装它。

+0

+1,很好的参考 – dolphy

+0

确定 - 在链接ü给我,这是写入改变ELF ...转至常规设置。我不知道通用设置在哪里听起来像GUI。我没有gui,我在嵌入式系统上工作。 THX – davidbobo

+0

@davidbobo:在内核配置,从内核源目录中运行'使menuconfig',享受你的CLI。不要忘记重建你的内核。 – Hasturkun

0

好吧,

我犯了一个小错误,当我检查我的电脑上疗法程序,我已经比嵌入式系统上的另一个信号,来检查它。自定义信号处理程序为什么还有一个问题,那就是没有核心转储。 解决方法是在其中一个链接:

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

在我的平台上它工作 - 另一个解决方案将在信号处理程序中生成核心转储。我听说gcore可以做到这一点,与Windows核心我有一个错误不兼容。