我有一个 C++ 程序可以完成它应该做的事情,但是指针肯定有问题,因为它最终崩溃并创建了一个核心转储。我的问题是我找不到核心文件,所以我无法调试它。
我试过了
ulimit -c unlimited
ulimit -a
Run Code Online (Sandbox Code Playgroud)
现在文件的尺寸设置为无限制,但我仍然找不到核心。我已经尝试了这里写的每个文件夹,但似乎仍然没有创建核心文件。
我在哪里可以找到它?
ken*_*orb 21
在 Ubuntu 中,核心转储由Apport处理并且可以位于/var/crash/. 但它在稳定版本中默认被禁用。
要启用 Apport,请运行:sudo systemctl enable apport.service或sudo service apport start。
要禁用,请运行:sudo systemctl disable apport.service或sudo 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)
因此,即使核心文件被 , 禁用ulimit,apport仍会捕获崩溃。
也可以看看:
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/
对于那些谷歌搜索:(在我的情况下 - 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)
| 归档时间: |
|
| 查看次数: |
66894 次 |
| 最近记录: |