我想要更改核心转储文件的默认位置,以便每次生成核心转储文件时,它都会保存到该目录中。此外,在该位置按崩溃的文件名称保存转储文件是否可行?
我想要更改核心转储文件的默认位置,以便每次生成核心转储文件时,它都会保存到该目录中。此外,在该位置按崩溃的文件名称保存转储文件是否可行?
/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
技巧”,我给予“+1”的赞同。请注意还有 sysctl
命令,可以使用命令“sysctl -w kernel.core_pattern='/tmp/core_%e.%p'
”。该命令的作用是将内核转储文件放置在 /tmp
目录下,文件名格式为“core_进程名.进程 ID”。 - hek2mglman
,没有安装 man-pages
,谢谢 :) - xerufecho '/tmp/core_%e.%p' | sudo tee /proc/sys/kernel/core_pattern >/dev/null
。否则,scp将无法正常工作。 - xnervwang/proc/sys/kernel/core_pattern
的内容会被自动进程周期性地覆盖,从而破坏您可能进行的任何手动更改。有关如何防止此问题的说明,请单击此处。 - dshin/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
/var/spool/abrt/
。
2. 具有使用命令abrt-gui
启动的GUI。
3. 通过附加有关失败进程的其他信息来增强corefile。
4. 使用此文件进行配置:/etc/abrt/abrt-action-save-package-data.conf
。ProcessUnpackaged = no
将其更改为“yes”,以从homebrew进程中捕获核心文件,否则它只会捕获软件包管理器安装的程序的核心文件。
[编辑回答如何使用coredump] 要检查核心转储,我执行以下操作:
cd /var/spool/abrt/XXXXXXX
gdb $(cat executable) coredump
可能有更好的方法来完成这个任务,但是gdb一直为我服务得很好,所以我没有寻找其他方法。只需将XXXXXXX替换为包含您的核心转储文件的文件夹即可。gdb命令可以直接复制粘贴使用。
参考资料:
默认情况下,核心转储文件的名称为core或core.pid(如果文件/proc/sys/kernel/core_uses_pid包含值1),并在当前工作目录中创建。
但是,/proc/sys/kernel/core_pattern文件可用于设置定义模板的方式,以用于命名和设置核心转储文件的路径。此文件中的默认值为“core”。
我们可以将核心转储文件名设置为 $ sudo sysctl -w kernel.core_pattern="/tmp/%e_core.%p" 当我们的应用程序崩溃(比如说sleep),我们会期望在/tmp文件夹下出现一个带有名称模式为sleep_core.pid的文件。其中%e是程序名称,%p是程序的PID。