作業中のアプリケーションがあり、セグメンテーション違反時にコアダンプを取得できません。実際、実際のコアダンプファイルを取得するのにまったく問題があります。単純なテストケースではコアダンプファイルが生成されますが、長さはゼロです。
私が持っているulimit -c unlimited
セットを。これは64ビットのUbuntuMaverickです。 次に何をすべきかヒントはありますか?
[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]
コアファイルが生成されているファイルシステムがParallelsSharedFolderであることに気づきました。(この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)
根本的な理由を明確に見つけることができませんでしたが、長さがゼロのコアファイルは、Parallels共有フォルダにコアファイルを作成しようとしたことが原因でした。
ローカルディレクトリからアプリケーションを実行することで問題を解決しました。別の方法は/proc/sys/kernel/core_pattern
、コアファイルをローカルディレクトリにダンプするように設定することだと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加