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

我已经设置并验证了ulimit:

ulimit -c unlimited 
ulimit -a 

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


当前回答

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

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

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

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

其他回答

如果您使用Fedora,为了生成核心转储文件在同一目录下的二进制文件:

echo "core.%e.%p" > /proc/sys/kernel/core_pattern

And

ulimit -c unlimited

我使用的是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只能降低限制,所以这是出乎意料的-欢迎评论)。

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

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

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

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

对于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'

编写在Ubuntu 16.04 LTS下获得核心转储的指令:

As @jtn has mentioned in his answer, Ubuntu delegates the display of crashes to apport, which in turn refuses to write the dump because the program is not an installed package. To remedy the problem, we need to make sure apport writes core dump files for non-package programs as well. To do so, create a file named ~/.config/apport/settings with the following contents: [main] unpackaged=true Now crash your program again, and see your crash files being generated within folder: /var/crash with names like *.1000.crash. Note that these files cannot be read by gdb directly. [Optional] To make the dumps readble by gdb, run the following command: apport-unpack <location_of_report> <target_directory>

引用: Core_dump - Oracle VM VirtualBox