
Ubuntu日本語フォーラム

ログインしていません。
ulimitや/proc/sys/kernel/core_patternを変更してトライしているのですがどうしてもcoreダンプを生成させることが出来ません。
"Segmentation fault"は発生しています。
今後、どのような試みをすれば coreダンプ生成につなげることができるのか 助言を頂けますと幸いです。
[動作環境]
・Ubuntu 11.10
・kernel 3.4.0 armv71
・board: Pandaboard ES RevB.
[これまでトライしたこと]
・ulimit -c unlimited
・echo core > /proc/sys/kernel/core_pattern
上記操作後、強制的にSegmentation Faltを発生するプログラムを走らせても
ループするプログラム実行時に "ctrl-\"操作しても Segmentation Faltメッセージは表示されるものの
coreダンプが生成されない。
ちなみに ubuntu10 on PC で 上述の操作を行った場合は、coreダンプが生成されていることを確認しております。
識者の皆様、ご助言のほどよろしくお願いいたします。
オフライン
【linux備忘ログ】 2011/05/10(火) コアダンプを使いたい: ★ ダメ株主 Z ★
http://tandyco.cocolog-nifty.com/blog/2011/05/linux-20110510-.html
↑こちらのブログに書いてあるように、端末で、
ulimit -c 100000
と実行した後、Segmentation faultで落ちるプログラムを実行したところ、
実行ファイルがある場所に core というファイルが生成されました。
オフライン
aaabbbcccdddeeefffggghhhさん、
ご回答ありがとうございます。
今一度、
$ ulimit -c 100000
で試したみましたが、状況は同じで、 Segment Faultは発生するもの、coreダンプせず でした。
合わせて
/etc/security/limits.confの設定変更(こちらは 初のこころみ)
も行ってみましたが、状況は変わらずでした。
ulimitの設定値が無視されているようです。
他の環境設定問題なのか、kernelのconfig値に起因していそうな気がしています。
オフライン
default から設定を変えていない状態で
ulimit -H -c ulimit -S -c
を実行した結果と ulimit -c 100000 を実行した後に上記を実行した結果を教えてください。
念のため、core をとりたいプログラムの dump する時の current directory(プログラムの中で chdir していなければコマンドを実行させたときの
current directory)のパーミッションを確認してください。
11.10 も ARM 用の ubuntu も使ったことが無いので kernel config については良く分かりません。一番関係ありそうなのは CONFIG_ELF_CORE だと思います。
Intel architecture ですと /boot の下に config-バージョン (バージョンの部分は実際に使っているカーネルのバージョンに置き換える)というテキストファイルがあるはずでそこを調べれば CONFIG_ELF_CORE の値が分かります。が、ARM architecture だとこのファイルがどこにあるのかは私にはまったく分かりません。
オフライン
taka.zoo.nさん、コメントありがとうございます。
>実行した結果を教えてください
$ ulimit -c 100000 事項前 および 事項後の limit -H -c / limt -S -c は下記の様になります。
$ ulimit -H -c unlimited $ ulimit -H -c 0 $ulimit -c 100000 $ ulimit -H -c 100000 $ ulimit -S -c 100000
>パーミッションを確認してください。
アプリケーション実行(== coreダンプ出力先の) directoryのパーミッションは 777(drwxrwxrwx)にしております。
sudo にても coreダンプ生成を試みております。
> CONFIG_ELF_CORE の値
ARM 用の ubuntu にも /boot/config-バージョンは存在しまして、
CONFIG_ELF_CORE=y
となっております。
引き続きよろしくお願いいたします。
オフライン
実行結果の2番めは -S のものでしょうか?そうだとすると default では core dump しないようになっているものを core dump するように正しく変更できているように見えます。CONFIG_ELF_CORE=y は core を dump する設定です。directory への書き込みもできるとなるとちょっと私には分かりません。
man core に core file が生成されない状況がいくつか解説されています。抄訳すると
・core file のファイル名(通常 core)というファイルに書き込み権限がない(ディレクトリに書き込み権限がない、すでに同名のファイルがあり書き込み権限がない、同名のディレクトリエントリーがありしかも通常ファイルではない。)
・同名のファイルがあり書き込み権限が有るがハードリンクの値が2以上
・core file をダンプする先のファイルシステムに空きがない、inode を使い果たした、read only mount されている、quota に達した。
・core file をダンプする先のディレクトリが無くなった
・RLIMIT_CORE (ulimit -c) または RLIMIT_FSIZE (ulimit -f) の値が 0
・実行ファイルの読み取り権限がない
・setuid/setgid に起因する問題
となっています。(詳しくは man page の原文をご参照ください。)既に確認したものもありますが、あとはこれらを一つずつ確認していくくらいしか、申し訳ありませんが思いつきません。
オフライン
taka.zoo.nさん、ご回答ありがとうございます。
>実行結果の2番めは -S のものでしょうか?
すみません、typoです。 ご推察どおり limit -S -c の値は 0です。
>man core に core file が生成されない状況がいくつか解説されています
ありがとうございます。
確認してみましたが、どれも該当するもの つまり coreダンプ生成の抑制しているものに該当しませんでした。
>申し訳ありませんが思いつきません。
いえいえ、アドバイスありがとうございます。
こうやって確認しても、特定できないとなると、いよいよソースレベルでの追っかけですかね。
取りかかりは、SegmentFaultを出しているところでしょうか。
#カーネルソースを これまでまともに読んだことがありません。。。(汗)
オフライン