我不久前在 StackOverflow 上发布了这个问题,但现在才发现这个社区,并且觉得这至少是一个同样适合这个问题的网站:
我了解到,如果 abrt-ccpp.service 安装在 Linux PC 上,它会取代/覆盖(我读过两个文件,不确定哪个是真的)文件/proc/sys/kernel/core_pattern
,否则指定的位置和文件名模式核心文件。
问题:
当我执行时systemctl
,为什么 abrt-ccpp.service 会exited
在该SUB
列下报告?我不明白active
和的组合exited
:服务是否“活动”/活动/正在运行?
> systemctl
UNIT LOAD ACTIVE SUB
abrt-ccpp.service loaded active exited ...
问题:
core文件在哪里生成的?我编写了这个程序来生成SIGSEGV
:
#include <iostream>
int main(int argc, char* argv[], char* envz[])
{
int* pInt = NULL;
std::cout << *pInt << std::endl;
return 0;
}
编译执行如下:
> g++ main.cpp
> ./a.out
Segmentation fault (core dumped)
但我无法找到核心文件的生成位置。
我尝试过的:
- 在与我的相同的目录中查找
main.cpp
。核心文件不存在。 /var/tmp/abrt/
由于以下评论而查看/etc/abrt/abrt.conf
。核心文件不存在。
...
# Specify where you want to store coredumps and all files which are needed for
# reporting. (default:/var/tmp/abrt)
#
# Changing dump location could cause problems with SELinux. See man_abrt_selinux(8).
#
#DumpLocation = /var/tmp/abrt
...
/var/spool/abrt/
由于评论而查看这个链接。核心文件不存在。- 编辑
/etc/abrt/abrt.conf
并取消注释并设置DumpLocation = ~/foo
现有目录。随后重新启动 abrt-hook-ccpp (sudo service abrt-ccpp restart
) 并重新运行a.out
。核心文件未生成于~/foo/
ulimit -c
经核实,报道称unlimited
。
我不知道还能尝试什么以及去哪里寻找。
如果有帮助,这是我的内容/proc/sys/kernel/core_pattern
:
> cat /proc/sys/kernel/core_pattern
|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
有人可以帮助解释 abrt-hook-ccpp 服务如何工作以及它在哪里生成核心文件吗?谢谢。
答案1
一种可能性是需要更改配置文件中的行/etc/abrt/abrt-action-save-package-data.conf
ProcessUnpackaged = no
到yes
,否则 abrtd 将仅从包管理器(dnf
、apt
或其他)安装的程序中捕获核心文件。使用abrt-gui
或abrt-cli
查找核心转储。
答案2
除了 meuh 所说的之外,一旦 abrt 守护进程收集了崩溃信息(修改上述配置文件后重新启动它),您可以使用 abrt-cli 或 abrt-gui 来查看该信息在哪里。
# abrt-cli -a ls
id xxxxxxxxxxxxxxxxxx
reason: MYPROGRAM killed by SIGABRT
time: Thu 10 Jan 2019 11:48:07 AM CET
cmdline: ./myExecutable
uid: 1001
Directory: /var/spool/abrt/ccpp-2019-01-10-11:48:07-17559
Run 'abrt-cli report /var/spool/abrt/ccpp-2019-01-10-11:48:07-17559' for creating a case in Red Hat Customer Portal
在提供的目录中,您将找到该coredump
文件。