在运行C程序时,它说“(核心转储)”,但我看不到当前路径下的任何文件。
我已经设置并验证了ulimit:
ulimit -c unlimited
ulimit -a
我还试图找到一个名为“核心”的文件,但没有得到核心转储文件? 有人帮忙吗,我的核心文件呢?
在运行C程序时,它说“(核心转储)”,但我看不到当前路径下的任何文件。
我已经设置并验证了ulimit:
ulimit -c unlimited
ulimit -a
我还试图找到一个名为“核心”的文件,但没有得到核心转储文件? 有人帮忙吗,我的核心文件呢?
当前回答
我在WSL的努力没有成功。
对于那些运行在Windows子系统For Linux (WSL)上的系统,此时似乎存在一个丢失核心转储文件的公开问题。
这些评论表明
这是我们已经意识到的一个已知问题,也是我们正在调查的事情。
Github的问题
Windows开发者反馈
其他回答
在我的例子中,原因是ulimit命令只影响当前终端。
如果我在第一个终端上设置ulimit -c unlimited。然后我启动一个新的终端来运行程序。当内核转储时,它不会生成内核文件。
您必须确认运行您的程序的终端的核心大小。
以下步骤适用于ubuntu 20.04和ubuntu 21.04:
停止分配服务
sudo service apport stop
设置准备运行程序的终端的核心大小
ulimit -c unlimited
我在WSL的努力没有成功。
对于那些运行在Windows子系统For Linux (WSL)上的系统,此时似乎存在一个丢失核心转储文件的公开问题。
这些评论表明
这是我们已经意识到的一个已知问题,也是我们正在调查的事情。
Github的问题
Windows开发者反馈
我可以想到以下两种可能性:
正如其他人已经指出的那样,程序可能会chdir()。是否允许运行程序的用户写入chdir()指定的目录?如果没有,则不能创建核心转储。 出于某种奇怪的原因,内核转储不命名为core。你可以检查/proc/sys/kernel/core_pattern。此外,您命名的find命令不会找到典型的核心转储。你应该使用find / name "*core "。*”,因为coredump的典型名称是core.$PID
我使用的是Linux Mint 19(基于Ubuntu 18)。我想在当前文件夹中有coredump文件。我必须做两件事:
修改/proc/sys/kernel/core_pattern(通过# echo "core.%p.%s.%c.%d. "# sysctl -w kernel.core_pattern=core.% P .%s.%c.%d.%P) 通过$ ulimit -c无限提高核心文件大小的限制
这已经写在答案里了,但我写出来是为了简洁地总结。有趣的是,修改限制不需要root权限(根据https://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user,非root只能降低限制,所以这是出乎意料的-欢迎评论)。
在Ubuntu18.04中,获取核心文件最简单的方法是输入下面的命令来停止apport服务。
sudo service apport stop
然后重新运行应用程序,你将得到转储文件在当前目录。