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

mat*_*v27 24 c++ 16.04

我有一个 C++ 程序可以完成它应该做的事情,但是指针肯定有问题,因为它最终崩溃并创建了一个核心转储。我的问题是我找不到核心文件,所以我无法调试它。

我试过了

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

现在文件的尺寸设置为无限制,但我仍然找不到核心。我已经尝试了这里写的每个文件夹但似乎仍然没有创建核心文件。

我在哪里可以找到它?

ken*_*orb 21

在 Ubuntu 中,核心转储由Apport处理并且可以位于/var/crash/. 但它在稳定版本中默认被禁用。

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


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

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

'problem_types': ['Bug', 'Package'],
Run Code Online (Sandbox Code Playgroud)

通过#在行的开头添加一个哈希符号 ( )。

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


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

$ cat /proc/sys/kernel/core_pattern
|/usr/share/apport/apport %p %s %c
Run Code Online (Sandbox Code Playgroud)

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

也可以看看:

  • 在 Ubuntu 20.04 下尝试了 `sudo service apport start`,但在 `/var/crash` 中没有出现崩溃转储。 (2认同)

yeh*_*ahs 18

以上所有内容都不适合我......我看了/var/log/apport.log:

cat /var/log/apport.log 
Run Code Online (Sandbox Code Playgroud)

我看到了文件名:

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

然后我搜索整个系统

sudo find . -name "core._home_guest_a_out.1000.4..."
Run Code Online (Sandbox Code Playgroud)

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

  • 我不明白为什么核心文件被写在那里而不是 /var/crash (每个人和他们的驴子都在谈论),为什么 apport 不记录完整路径,在哪里配置它以及为什么几乎找不到任何东西通过 Google 获取“/var/lib/apport/coredump”。Ubuntu 的人在那里做什么? (6认同)

ジョー*_*ョージ 7

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

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

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


资料来源: