我在哪里可以找到 ubuntu 16.04LTS 中的核心转储?

我在哪里可以找到 ubuntu 16.04LTS 中的核心转储?

我有一个 C++ 程序,它按预期执行,但指针肯定有问题,因为它最后崩溃并创建了核心转储。我的问题是我找不到核心文件,所以我无法调试它。

我努力了

ulimit -c unlimited
ulimit -a

现在文件的大小设置为无限,但我仍然找不到核心。我在每个文件夹中都尝试过这里但似乎仍然没有创建核心文件。

在哪里可以找到它?

答案1

在 Ubuntu 中,核心转储由阿波特并且可以位于/var/crash/。但在稳定版本中,它默认是禁用的。

要启用 Apport,请运行:sudo systemctl enable apport.servicesudo service apport start


要禁用,请运行:sudo systemctl disable apport.servicesudo service apport stop以返回常规核心转储方法。请参阅:如何启用或禁用 Apport?

要永久禁用,请编辑/etc/apport/crashdb.conf文件并注释以下行:

'problem_types': ['Bug', 'Package'],

#在行首添加井号 ( )。

要禁用崩溃报告(恢复正常),请删除井号(与原来相同)。


您还可以检查core_pattern内核如何处理核心转储:

$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c

因此即使核心文件被禁用ulimitapport仍然会捕获崩溃。

也可以看看:

答案2

以上所有对我来说都不起作用...我看了/var/log/apport.log:

cat /var/log/apport.log 

我看到了文件名:

ERROR: apport (pid 3426) Mon Nov  8 14:34:07 2021: writing core dump to core._home_guest_a_out.1000.4 ... 

然后我搜索整个系统

sudo find . -name "core._home_guest_a_out.1000.4..."

我发现核心转储在/var/lib/apport/coredump/

答案3

对于那些谷歌搜索的人来说:(在我的情况下 - Ubuntu 16.04和18.04以及一个自定义应用程序)/var/crash仍然是空的,因此处理核心创建的快速方法(假设你正在使用相关的 ulimit 内置设置) 曾是

sudo sysctl -w kernel.core_pattern=core.%u.%p.%t # to enable core generation

systemctl restart apport # to restore default apport settings
# which, by the way, were "|/usr/share/apport/apport %p %s %c %d %P" (without quotes)


资料来源:

相关内容