Phi*_*ßen 53
此链接包含一个很好的清单,为什么不生成核心转储:
exit()而不是使用核心转储处理程序.Emp*_*ian 51
确保您当前的目录(在崩溃时 - server可能更改目录)是可写的.如果服务器调用setuid,该目录必须是该用户可写的.
还检查一下/proc/sys/kernel/core_pattern.这可能会将核心转储重定向到另一个目录,并且该目录必须是可写的.更多信息在这里.
小智 8
对于systemd系统1,安装软件包systemd-coredump。Coredump 可以通过以下方式找到:
ls /var/lib/systemd/coredump
Run Code Online (Sandbox Code Playgroud)
此外,这些核心转储以lz4格式压缩。解压缩,您可以使用包liblz4-tool这样的:lz4 -d FILE。为了能够使用 调试解压缩的核心转储gdb,我还必须将完全长的文件名重命名为更短的名称...
1 Debian 9 伸展
请记住,如果您是从服务启动服务器,它将启动另一个bash会话,因此ulimit在那里无效。尝试将其放在脚本本身中:
ulimit -c unlimited
Run Code Online (Sandbox Code Playgroud)
校验:
$ sysctl kernel.core_pattern
Run Code Online (Sandbox Code Playgroud)
查看转储是如何创建的(%e将是进程名称,%t将是系统时间).
如果您使用的是Ubuntu,您的转储是由apportin 创建的/var/crash,但格式不同(编辑文件以查看它).
您可以通过以下方式测试:
sleep 10 &
killall -SIGSEGV sleep
Run Code Online (Sandbox Code Playgroud)
如果核心转储成功,您将在分段故障指示后看到"(core dumped)".
阅读更多:
Ubuntu的
请阅读更多:
https://wiki.ubuntu.com/Apport