嗨,我目前正在 Ubuntu 上编写 C++ 程序,无法生成带有分段错误的核心转储。我只得到“分段错误”,而不是(核心转储)我已设置 ulimit -c unlimited。
我以前可以生成核心转储,但不久前它们停止了。可能是因为我因为这个错误禁用了 apport“抱歉,Ubuntu 12.04 遇到内部错误。”。
所以我想知道在 ulimit -c unlimited 之后还有哪些其他步骤可以启用核心转储?
答案1
必须在内核中启用核心转储
/proc/sys/kernel/core_pattern
可以通过以下方式设置
sysctl kernel.core_pattern=$coredump_name
例如
sysctl kernel.core_pattern=core
sysctl kernel.core_pattern=/var/crash/%E.%p.%t.%s
%E
给出崩溃程序的完整路径名(/
替换为!
)%p
给出崩溃程序的进程 ID%t
给出纪元时间戳%s
给出终止信号编号
完整详细信息请参阅man 5 core
。
内核的默认值是core
,但在启动时可以使用/etc/sysctl.conf
或/etc/sysctl.d/*.conf
或类似命令将其设置为其他值(或禁用)。如果您使用的是后者,则只需添加一个新文件,其名称排在其他文件之后(可能以 开头z
);如果没有,则编辑现有文件。在该文件中,将参数放入sysctl
上述命令中,例如
kernel.core_pattern=core