禁用 apport 后无法生成核心转储

禁用 apport 后无法生成核心转储

嗨,我目前正在 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

相关内容