在运行C程序时,它说“(核心转储)”,但我看不到当前路径下的任何文件。

我已经设置并验证了ulimit:

ulimit -c unlimited 
ulimit -a 

我还试图找到一个名为“核心”的文件,但没有得到核心转储文件? 有人帮忙吗,我的核心文件呢?


当前回答

对于fedora25,我可以在

/var/spool/abrt/ccpp-2017-02-16-16:36:51-2974/coredump

where ccpp-2017-02-16-16:36:51-2974" is pattern "%s %c %p %u %g %t %p % as per ' /proc/sys/kernel/core_pattern'

其他回答

我可以想到以下两种可能性:

正如其他人已经指出的那样,程序可能会chdir()。是否允许运行程序的用户写入chdir()指定的目录?如果没有,则不能创建核心转储。 出于某种奇怪的原因,内核转储不命名为core。你可以检查/proc/sys/kernel/core_pattern。此外,您命名的find命令不会找到典型的核心转储。你应该使用find / name "*core "。*”,因为coredump的典型名称是core.$PID

一行代码获取最新的核心转储路径:

ls -t $(cat /proc/sys/kernel/core_pattern | awk -F% '{print $1"*"}') 2>/dev/null | head -1

当然,您可以将该行的最后一个-1修改为-4,以获得最后4个核心转储。

注意:如果路径模式在最后一个/之前使用变量,或者当非核心转储文件在该目录下时,这并不预期会起作用。

在我的例子中,原因是ulimit命令只影响当前终端。

如果我在第一个终端上设置ulimit -c unlimited。然后我启动一个新的终端来运行程序。当内核转储时,它不会生成内核文件。

您必须确认运行您的程序的终端的核心大小。

以下步骤适用于ubuntu 20.04和ubuntu 21.04:

停止分配服务

sudo service apport stop

设置准备运行程序的终端的核心大小

ulimit -c unlimited

我在WSL的努力没有成功。

对于那些运行在Windows子系统For Linux (WSL)上的系统,此时似乎存在一个丢失核心转储文件的公开问题。

这些评论表明

这是我们已经意识到的一个已知问题,也是我们正在调查的事情。

Github的问题

Windows开发者反馈

Ulimit -c unlimited使内核文件在“内核转储”后正确地出现在当前目录中。