gpt4 book ai didi

linux - 核心转储已创建,但未写入文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:39 24 4
gpt4 key购买 nike

我正在尝试获取在嵌入式 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?可以肯定的是,我还在文件系统上搜索了 core* - 它不在那里。 dmesg 不显示任何错误(但如果我将核心转储通过管道传递给无效程序,它就会显示)。

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

因此,我想一种解决方案是修改示例程序,以便将转储写入文件,而不是仅仅计算字节数。但是为什么明明有数据就不能正常工作呢?

最佳答案

如果您的专有应用程序调用 setrlimit(2) RLIMIT_CORE 设置为 0,或者如果它是 setuid ,没有核心转储发生。参见 core(5) .也许使用 strace(1)找出来。您可以安装 gdb(可能通过 [交叉] 编译)。另见 gcore(1) .

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

关于linux - 核心转储已创建,但未写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21372893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com