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


14

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

我试过了

ulimit -c unlimited
ulimit -a

现在文件的尺寸设置为无限制,但仍然找不到核心。我尝试在这里编写的每个文件夹中使用但似乎仍未创建核心文件。

在哪里可以找到它?


当前目录,或/var/crash
waltinator

4
在大多数情况下,@waltinator都是正确的,有时有时需要检查/var/log/apport.log,因为现代Ubuntu版本使用Apport,这可能以非显而易见的方式干扰核心转储。有关更多信息,请参见stackoverflow.com/a/18368068/1772379
本·约翰逊

Answers:


12

在Ubuntu中,核心转储由Apport处理,可以位于中/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也仍然会捕获崩溃。

也可以看看:


3

对于那些googlin':(在我的情况下-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)


资料来源:


简单,直接,有效。
Taekahn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.