核心转储文件名被截断

时间:2009-11-09 14:05:05

标签: linux coredump

鉴于/proc/sys/kernel/core_pattern中的配置设置为/cores/core.%e.%p,核心转储根据模式命名,但对于运行具有长名称的可执行文件的进程,例如SampleCrashApplication,生成的核心文件将包含截断的可执行文件名:/cores/core.SampleCrashAppl.9933

造成这种情况的原因是什么? man core页面仅讨论最终核心文件名的最大大小为128(2.6.19之前的内核为64)

1 个答案:

答案 0 :(得分:3)

可以在exec.c here中找到此代码。

代码将根据模式将corename复制到第一个百分比(给出/ cores / core。)。按百分比增加并处理'e'。用于处理'e'部分的代码使用基于current-> comm结构的snprintf打印出模式。

这是可执行的名称(不包括路径)TRUNCATED为值TASK_COMM_LEN。由于这被定义为16个字符(至少在我找到的内核中),因此SampleCrashApplication被截断为15 + 1个字符(最后为空字节为1),这解释了为什么会得到截断的核心转储名称。

为什么这个结构会截断名称TASK_COMM_LEN,这是一个更深层次的问题,但它是内核的内容,并且有一些讨论here