是否已创建核心转储但未写入文件?

时间:2014-01-27 04:11:06

标签: linux coredump

我正在尝试在嵌入式Linux系统上运行专有应用程序的核心转储,为此我编写了一些插件。 我做的是:

ulimit -c unlimited
echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
kill -3 <PID>`

但是,没有创建核心转储。 '/ tmp / cores'存在并且可供所有人写入,并且磁盘有足够的可用空间。当我使用sleep 100 &作为示例进程尝试相同的事情然后将其终止时,将创建核心转储。

我尝试了core manpage的管道语法示例,它将一些参数和核心转储的大小写入名为core.info的文件中。此文件已创建,且大小大于0.因此,如果创建了核心转储,为什么不将其写入/tmp/cores?可以肯定的是,我还在文件系统上搜索了核心* - 它不在那里。 dmesg没有显示任何错误(但如果我将核心转储管道传输到无效程序,则会发生错误。)

更多信息:系统可能基于Debian,但我不太确定。 GDB不可用,以及许多其他工具 - 只有busybox用于基本的东西。 我正在尝试调试的过程在被杀后不久就会自动重启。

所以,我想一个解决方案就是修改示例程序,以便将转储写入文件而不是仅计算字节数。但是,如果显然存在一些数据,为什么它不能正常工作?

1 个答案:

答案 0 :(得分:0)

如果您的专有应用程序调用{​​{3}}并将RLIMIT_CORE设置为0,或者它是setrlimit(2),则不会发生核心转储。见setuid。或许可以使用core(5)来查找。你可以安装gdb(可能通过[交叉]编译它)。另请参阅strace(1)

另外,检查(并设置)调用shell中的限制。使用gcore(1)内置ulimit。否则,cat /proc/self/limits应显示限制。如果您没有bash,则可以在 C 中编写一个小包装,然后调用setrlimit,然后execve ...