• ベストアンサー

coreダンプの見方。

Perlで掲示板等で、時々coreダンプをだしてしまうのですが、 このファイルにはいったい何が出力されているんですか? 見方とか、見るためのツールとかがあるんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

わざと perl に core をはかせる perl スクリプトも書けないこと はないですけど、syscall を使うとか、C言語で書かれた外部ルー チンを呼び出すといった特殊なことしてバグってしまうか、自身を kill するといった明らかなことをするかしないといけませんので、 普通には起きないと思います。 だから、たいていは perl のバグと考えて差支えないと思います。 ところで、core をはくときに、どのようなメッセージで落ちてい るかは記録に残っているでしょうか?cgi だと、メッセージが直接 には画面に出ませんが、httpd のログとか、FreeBSD なら /var/log/messages のログとか(linux も同様のがあるはず)、探 してみてください。

DeathPIYOPIYO
質問者

お礼

お返事送れてすみません。 hi-hoのWebレンタルでCGIを利用しているので、logを見れないんです。 たまに、大きなcoreを吐いて容量を圧迫するので何故かなと思ってました。 syscallもkillもしていないです。謎です。 ありがとうございました。

その他の回答 (1)

回答No.1

core には、もとのプロセスが利用していたメモリの内容が全部入っ ています。プログラムのバグにより変なアドレスにアクセスしたり した場合に、生成されます。(cgi プログラムのバグではなく、 perl 自身またはそれがダイナミックロードしたモジュールのバグ です) もとのプログラム(この場合、perl 自身)と、core の内容をつき あわせれば、どのような原因で core をダンプすることになったか が解析できます。解析のツールとしてはいくつかありますが、最近 の PC-UNIX では gdb が標準的でしょう。 ただし、シンボリックな(つまり、変数名とか行番号とかを使った) 解析をするには、もとの perl やモジュールが -g オプションつき でコンパイルされ、かつソースコードが手元になければいけません。 そうでない場合は、機械語ごとに追うしかなくなるので、現実的で はないでしょう。

DeathPIYOPIYO
質問者

補足

coreができるということは、perlで書かれたスクリプトに問題があるのでなくて、 Perl自身のバグと考えて良いんですね?