【问题标题】:Core dump file name truncated核心转储文件名被截断
【发布时间】:2009-11-09 14:05:04
【问题描述】:

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

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

【问题讨论】:

    标签: linux coredump


    【解决方案1】:

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

    代码将根据模式将核心名称复制到第一个百分比(给出 /cores/core.)。在百分比它将增加和处理'e'。处理“e”部分的代码使用基于 current->comm 结构的 snprintf 打印出模式。

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多