1
当我尝试查找核心转储文件时,我查看了类似的主题,但似乎没有一个解决方案适合我。有人可以帮我调试吗?我的应用程序在日志尾部生成输出,表明由于核心转储而失败,但该文件未在任何地方生成,并且该信息未保留在日志文件中。
Linux系统:
NAME="Red Hat Enterprise Linux Server" VERSION="7.8 (Maipo)" ID="rhel" ID_LIKE="fedora" 如前所述,我从给定的链接尝试了多种方法:
极限值
ulimit -c
unlimited
cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E
我检查时发现文件夹 ap 不存在
我还尝试使用以 /tmp 开头的字符串修改 /proc/sys/kernel/core_pattern
echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern: Read-only file system
如果我以 root 身份运行,这会起作用吗,因为我目前没有该访问权限?
我运行应用程序的目录中也不存在核心转储文件。
我也尝试在整个系统上查找:
find / -name 'core*'
find / -name '*apport*'
我还检查了不同的文件夹:
ls /var/cache/abrt
ls: cannot access /var/cache/abrt: No such file or directory
ls /var/crash
ls: cannot access /var/crash: No such file or directory
ls /var/spool/abrt
ls: cannot access /var/spool/abrt: No such file or directory
cat /var/log/apport.log
cat: /var/log/apport.log: No such file or directory
没有结果:
ls /var/lib/systemd/coredump/
对于以下解决方案:为了解决这个问题,我们需要确保 apport 也为非包程序写入核心转储文件。为此,请创建一个名为 ~/.config/apport/settings 的文件,其中包含以下内容: [main] unpackaged=true
cd ~/.config/apport/
cd: /opt/front/arena/.config/apport/: No such file or directory
对于解决方案:如果您在 RHEL 上缺少二进制文件的核心转储,并且在使用时abrt
,请确保/etc/abrt/abrt-action-save-package-data.conf
包含ProcessUnpackaged = yes
cd /etc/abrt
cd: /etc/abrt: No such file or directory
我想我已经没有选择了。谢谢
答案1
$ ulimit -c
unlimited
这很好。除非您有权限问题,否则将生成没有大小限制的核心文件。如果此命令未显示unlimited
,您可以使用 更改该值ulimit -c unlimited
。
$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c %d %P %E
如果您想要磁盘上有一个核心文件,这不是您想要的,因为此设置将核心文件重定向到程序apport
(未安装)。
您可以像以前一样手动更改此设置,但您必须具有管理员权限。以 root 身份登录并使用以下命令更改 core_pattern 文件
echo /tmp/cores/core.%e.%p.%h.%t > /proc/sys/kernel/core_pattern
...或使用sudo
:
echo /tmp/core.%e.%p.%h.%t | sudo dd of=/proc/sys/kernel/core_pattern
最好的方法是使用sysctl
:
sudo sysctl -w kernel.core_pattern=/tmp/cores/core.%e.%p.%h.%t
通常,您可以通过/etc/sysctl.conf
相应的编辑使此更改永久化。
Read-only file system
注意:我发现当您尝试更改文件内容时,您遇到了。看来您的 proc FS 是以只读方式安装的,在更改以下内容之前,您必须以读写权限重新安装它/proc
:
sudo mount -o remount,rw /proc
就是这样。现在,您的核心文件将按照您的要求在 /tmp 中生成。你可以像这样测试它(使用 Bash):
$ sleep 3 & kill -SEGV $!
[1] 4604
[1]+ Segmentation fault sleep 3
$ ls /tmp/core*
有关核心文件的更多信息man 5 core
。