【发布时间】:2013-04-16 22:15:06
【问题描述】:
我想更改核心转储文件的默认位置,以便每次生成核心转储时,它都会转到该目录。另外,是否可以在此位置以崩溃文件的名称保存转储文件?
【问题讨论】:
-
“发生了什么”版本:stackoverflow.com/questions/2065912/…?
标签: linux crash-dumps coredump recovery
我想更改核心转储文件的默认位置,以便每次生成核心转储时,它都会转到该目录。另外,是否可以在此位置以崩溃文件的名称保存转储文件?
【问题讨论】:
标签: linux crash-dumps coredump recovery
是的,是的。您可以更改/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]
【讨论】:
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
$ 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,谢谢:)
在按照已接受答案中的说明进行操作之前,最好先检查/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:
/var/spool/abrt/
abrt-gui 启动的gui
/etc/abrt/abrt-action-save-package-data.conf
使用它的一个常见障碍是在配置文件中更改这一行:
ProcessUnpackaged = no
将其更改为 yes 以从您的自制进程中捕获核心文件,否则它将仅从包管理器安装的程序中捕获核心文件。
[编辑回答如何使用 coredump] 为了检查核心转储,我这样做:
cd /var/spool/abrt/XXXXXXX
gdb $(cat executable) coredump
可能有更好的方法,但 gdb 对我很有帮助,所以我没有寻找其他方法。只需将 XXXXXXX 替换为包含您的核心转储文件的文件夹即可。 gdb 命令已准备好剪切和粘贴。
参考资料:
【讨论】:
apport is used the same way and saves dumps into /var/crash/.