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

dsk*_*and 2 c++ apport segmentation-fault gdb

嗨,我目前正在 Ubuntu 上编程 c++,但无法生成带有分段错误的核心转储。我只是得到“分段错误”而不是我设置的(核心转储) ulimit -c 无限制。

我曾经能够生成核心转储,但前一段时间他们停止了。也许这是因为我因为这个错误而禁用了 apport “对不起,Ubuntu 12.04 遇到了内部错误。” .

所以我想知道在 ulimit -c unlimited 之后还有哪些其他步骤可以启用核心转储?

Mar*_*tin 6

必须在内核中启用 Coredumps

/proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)

可以通过设置

sysctl kernel.core_pattern=$coredump_name
Run Code Online (Sandbox Code Playgroud)

例如

sysctl kernel.core_pattern=core
sysctl kernel.core_pattern=/var/crash/%E.%p.%t.%s
Run Code Online (Sandbox Code Playgroud)
  • %E给出崩溃程序的完整路径名(/替换为!
  • %p 给出崩溃程序的进程 ID
  • %t 给出纪元时间戳
  • %s 给出终止信号编号

完整的细节在man 5 core.

内核的默认值是core,但它可以在引导时设置为其他(或禁用),使用/etc/sysctl.conf/etc/sysctl.d/*.conf或类似的。如果您有后者,那么只需添加一个名称在其他文件之后排序的新文件(可能以 开头z);如果没有,则编辑现有文件。在该文件中将参数放在sysctl上面的命令中,例如

kernel.core_pattern=core
Run Code Online (Sandbox Code Playgroud)