【问题标题】:Changing location of core dump更改核心转储的位置
【发布时间】:2013-04-16 22:15:06
【问题描述】:

我想更改核心转储文件的默认位置,以便每次生成核心转储时,它都会转到该目录。另外,是否可以在此位置以崩溃文件的名称保存转储文件?

【问题讨论】:

标签: linux crash-dumps coredump recovery


【解决方案1】:

是的,是的。您可以更改/proc/sys/kernel/core_pattern 以定义用于生成核心文件的路径名。更多内容请见man core

示例:

echo '/tmp/core_%e.%p' | sudo tee /proc/sys/kernel/core_pattern    # `tee' instead of > so that
                                                                   # opening happens in the
                                                                   # elevated process

将导致在/tmp 中生成所有未来的核心转储并命名为core_[program].[pid]

【讨论】:

  • +1 表示tee 技巧;)请注意,还有sysctl。然后是sysctl -w kernel.core_pattern='/tmp/core_%e.%p'
  • tee 的直接替代方案是 sudo bash -c "echo '/tmp/core_%e.%p' >/proc/sys/kernel/core_pattern"
  • 在拱门上我没有核心的人输入:/ No manual entry for core in section 5
  • @Xerus 它应该在那里...$ pacman -Q --owns /usr/share/man/man5/core.5.gz - /usr/share/man/man5/core.5.gz is owned by man-pages 5.09-2 也许你需要安装那个包?
  • 啊,我只安装了man,没有安装man-pages,谢谢:)
【解决方案2】:

在按照已接受答案中的说明进行操作之前,最好先检查/proc/sys/kernel/core_pattern 的内容,看看是否正在使用 Redhat abrt 系统。

-> cat /proc/sys/kernel/core_pattern
|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e

如果它正在使用中,那么您已经有了一个非常广泛的方案来管理您想要在覆盖之前了解的核心文件。

简而言之,abrt:

  1. 把核心文件放在这里:/var/spool/abrt/
  2. 有一个以命令abrt-gui 启动的gui
  3. 使用有关失败进程的附加信息来扩充核心文件。
  4. 配置了这个文件:/etc/abrt/abrt-action-save-package-data.conf

使用它的一个常见障碍是在配置文件中更改这一行:

ProcessUnpackaged = no

将其更改为 yes 以从您的自制进程中捕获核心文件,否则它将仅从包管理器安装的程序中捕获核心文件。

[编辑回答如何使用 coredump] 为了检查核心转储,我这样做:

cd /var/spool/abrt/XXXXXXX
gdb $(cat executable) coredump

可能有更好的方法,但 gdb 对我很有帮助,所以我没有寻找其他方法。只需将 XXXXXXX 替换为包含您的核心转储文件的文件夹即可。 gdb 命令已准备好剪切和粘贴。

参考资料:

Redhat Book

CentOS Forum

【讨论】:

  • 感谢您提供此信息。我得到了 coredump 文件,但是如何用 abrt 打开它?
  • 如果您不确定核心文件是如何生成的,只需执行#file core.XYZ - 这将显示为生成核心文件而执行的命令。
猜你喜欢
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2019-08-01
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多