在 Parallels 共享文件夹上的 Ubuntu 上没有核心转储

lee*_*777 5 ubuntu virtual-machine parallels core-dump

我有一个正在处理的应用程序,但在出现段错误时无法获取核心转储。事实上,我根本无法获得真正的核心转储文件。一个简单的测试用例将生成一个核心转储文件,但它的长度为零。

我已经准备好了ulimit -c unlimited。这是 64 位 Ubuntu Maverick。 任何提示下一步该怎么做?

[dlee@dlee-oak t]$ ulimit -c
unlimited

[dlee@dlee-oak t]$ cat mkcore.cpp
int main() { *((int *)0) = 0; }

[dlee@dlee-oak t]$ g++ -g mkcore.cpp -o mkcore

[dlee@dlee-oak t]$ ./mkcore 
Segmentation fault

[dlee@dlee-oak t]$ ls -l core*
-rw-r--r-- 1 dlee dlee 0 2010-12-21 15:00 core.2993
Run Code Online (Sandbox Code Playgroud)

编辑:更多信息

[dlee@dlee-oak t]$ tail -n +1 /proc/sys/kernel/core_*
==> /proc/sys/kernel/core_pattern <==
core

==> /proc/sys/kernel/core_pipe_limit <==
0

==> /proc/sys/kernel/core_uses_pid <==
1

[dlee@dlee-oak t]$ tail /var/log/kern.log
<snip/>
Dec 21 16:07:40 dlee-oak kernel: [  133.863045] mkcore[1589]: segfault at 0 ip 000000000040043d sp 00007fffbd025510 error 6 in mkcore[400000+aa000]
Run Code Online (Sandbox Code Playgroud)

我刚刚意识到生成核心文件的文件系统是Parallels Shared Folder。(这个 Ubuntu 实例在我 Mac 上的 Parallels VM 上运行)。当我从本地磁盘上的目录运行应用程序时,会按预期生成核心文件。

所以我会稍微改变一下问题:为什么它不在 prl_fs 文件系统上生成核心文件?只是好奇...

编辑#2:

您会注意到,当它生成零长度核心文件时,它不会打印(core dumped). 我确实仔细检查了我的理智,是的,确实正在创建零长度核心文件。

[dlee@dlee-oak t]$ X=$(pwd)
[dlee@dlee-oak t]$ ls -l core*
ls: cannot access core*: No such file or directory
[dlee@dlee-oak t]$ ./mkcore 
Segmentation fault
[dlee@dlee-oak t]$ ls -l core*
-rw-r--r-- 1 dlee dlee 0 2010-12-22 00:41 core.6009

[dlee@dlee-oak t]$ cd ~
[dlee@dlee-oak ~]$ $X/mkcore
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

lee*_*777 1

我无法清楚地找到根本原因,但零长度核心文件是由于尝试在Parallels Shared Folder上创建核心文件引起的。

我通过从本地目录运行应用程序解决了该问题。我想另一种选择是将/proc/sys/kernel/core_pattern核心文件设置为转储到本地目录中。