Sender: katsu@FLAGSHIP Newsgroups: fj.os.linux,fj.unix Followup-To: fj.unix Subject: Re: =?ISO-2022-JP?B?GyRCJSIlVyVqJE4bKEJjb3JlGyRCJUAlcyVXJCwbKEI=?= =?ISO-2022-JP?B?GyRCPVAkSiQkJHMkRyQ5JCwbKEI=?= References: <3794A215.D3AE1A7C@yk.rim.or.jp> <3794CB7E.3B6F5060@ma5.seikyou.ne.jp> <7n7a94$385$1@news.telewaynet.ad.jp> From: WATANABE Katsuhiro Date: 13 Aug 2002 09:17:51 +0900 Message-ID: Organization: An individual person. User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Lines: 43 Xref: FLAGSHIP mine:441 Followup-To: に注意。 あまりの follow-up の遅さが議論の妨げになっていたらごめんなさい。 記事 で Toshio Doi さんいはく > "REDD" writes: > > > いままで疑問に思っていたのですが、core をはかせたら、 > > 何かいいことがあるのでしょうか? > > gdbに食わせると、coreをはいた瞬間すなわちプログラムが異常終了した瞬間 > にどこを実行していたとか、スタックフレームがどうなっていたとか、変数の > 値がどうなっていたとかの情報が得られるので、デバッグするのに非常に有益 > です……なんてことは当然ご存知だと思いますが、他に何があるかと聞かれる > と分かりません。 「core をはいた瞬間すなわち異常終了した瞬間」とは限りません。正常に 動作中でも(しばしば SUSPEND を伴って)QUIT キーを押すなどして (see. stty(1))ユーザの指定で陽に core を得て、その時点のプロセスの 状態を調査するのは普通に行なわれる技法です。ただし最近のシステムでは、 core file を経由することなく、プロセスに debugger をattatch して しまうことでしょう。 プロセスの初期化が済んだ時点や実行途中の状態(*1)を core file として 保存(*2)し、その状態からのちに再実行をするのにも使われます。再実行には core file の構造を再びプロセスのデータ領域に写像する必要がありますが、 通常この作業は undump と呼ばれます。 *1) (memory) image とか (memory) snapshot という用語もあります。 *2) get core とも dump とも呼ばれます。UNIX の種類によっては gcore(1) があります。 get core/undump の組は、Emacs や TeX などの大きなプログラムの インストールや、perl で複雑なプログラムを書いた場合などによく用いられた 技法です。初期化にかかる長い時間を一気に削減しようとしたのです。しかし 最近では、この考え方は全くはやりません。 異常終了による受動的な core の生成ではなく、能動的な get core と いうのは一般ユーザには思い付きにくいものかもしれません。多分 core は、 SIGSEGV や SIGBUS と強く関連づけされすぎているのでしょう。 -- 渡邊克宏 http://katsu.watanabe.name