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

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

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

我已经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

编辑:更多信息

[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]

我刚刚意识到生成核心文件的文件系统是Parallels 共享文件夹。 (此 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)

答案1

我无法清楚地找到根本原因,但零长度核心文件是由于尝试在Parallels 共享文件夹

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

相关内容