如何在 Ubuntu 20.04 中找到我自己代码的核心文件?

Jos*_*ook 1 debugging

这个问题中

建议采取以下措施:

ulimit -c unlimited
ulimit -a
Run Code Online (Sandbox Code Playgroud)

将限制设置为零以外的值。以前在我的系统上它是 0。

段错误后没有核心文件。

所以, sudo systemctl enable apport.service(尽管这似乎与发行版相关,而不是与开发人员相关)。/var/crash此后,工作目录中或工作目录中没有核心文件。

还有:

sudo sysctl -w kernel.core_pattern=core.%u.%p.%t # to enable core generation
systemctl restart apport # to restore default apport settings
Run Code Online (Sandbox Code Playgroud)

还是什么都没有。

观看/var/log/apport.log节目

ERROR: apport (pid 34940) Fri Dec 24 11:48:47 2021: executable does not belong to a package, ignoring
Run Code Online (Sandbox Code Playgroud)

哦,好!Ubuntu 已禁用我自己的代码的核心转储,从而破坏了一个有价值的调试工具。

如何获得我自己的批准并获取我自己的可执行文件的核心转储?

Jos*_*ook 5

知道了。

禁用批准

sudo systemctl disable apport
Run Code Online (Sandbox Code Playgroud)

然后,设置kernel.core_pattern

sudo sysctl -w kernel.core_pattern=core.%u.%p.%t # to enable core generation
Run Code Online (Sandbox Code Playgroud)

然后更改ulimit

ulimit -c unknown
Run Code Online (Sandbox Code Playgroud)

核心转储现在位于工作目录中。

这些更改在重新启动后不会持续(对我来说)。

  • 禁用批准将继续存在。要使 sysctl 更改持续存在,请将其存储在 /etc/sysctl.d 中的自定义文件中。为了使 ulimit 更改持续存在...我不确定它是否仍然是 /etc/security/limits.conf 或者是否某些 systemd 取代了它:) (3认同)