[ruby-dev:3530] Re: GC target (Re: [ruby-list:10035] Re: Ruby/Gtk text widget)
From:
Takashi Nakai <nakai@...1.sys.to.casio.co.jp>
Date:
1998-10-13 20:48:42 UTC
List:
ruby-dev #3530
ど〜も、中井と申します。 /['o']
下記の話題でのGC絡みのデバッグについてなのですが、簡単そうな
アイディアを思い付きましたので検討していただければ幸いです。
1.GC絡みのデバッグ用のコンパイルスイッチを用意して、
そのスイッチが定義されている場合は、
2.こまめにGCをかけて、参照されていない部分は回収しちゃう
でも、印をつけるだけでメモリーの再利用はしない。
3.アクセスのたびに、上記の印をがついているオブジェクトを
参照していないかのチェックする。
と言うものです。
「3.アクセスのたび…」が難しい場合は、「2.…印をつける…」
所で、必要な情報以外は、死にやすい(トラップをかけやすい?)デー
タで初期化してしまっておくだけでもデバッガーで追っかけやすいのでは
ないでしょうか。
この方法の欠点は、メモリーを再利用しないので、長時間動作後に
発生するエラー等のデバッグは難しい(バグにぶつかる前にメモリー
がなくなってしまう)ことでしょう。
でも、以外と簡単に対応出来そうなので、正式版に入っていなくても
必要に応じて組み込めそうな気がします。
それでは、失礼いたします。
matz@netlab.co.jp (Yukihiro Matsumoto) さんは書きました:
>まつもと ゆきひろです
>
>In message "[ruby-dev:3524] GC target (Re: [ruby-list:10035] Re: Ruby/Gtk text
widget)"
> on 98/10/13, "D.Kanda" <MAP2303@mapletown.net> writes:
>
>| かんだです。
>
>| これ、GC で落ちているんですけれど、何を GC しようとしたかっていう情報は
>|得られませんかね? クラス名だけでもいいですので。もしくはGC を OFF にして、
>|参照が無くなったらすぐに free するように動作させられてもいいです。
>
>うにゃ? GCで落ちるというのはだいたい
>
> (1) 参照されてないから勝手に回収されちゃう
> (2) 回収された領域をアクセスしにいっちゃう
>
>という独立した2段階からなっていて,クラス名が分かるのは前者,
>実際に落ちるのは後者ですから,落ちるタイミングでクラス名を知
>るのはかなり難しいですね.
>
>なんか良い手は無いかなあ.
>
>| GC のタイミングはプログラムの流れと独立だから、デバッガで辿っても患部の
>|発見が難しいので。
>
>制御の流れとは独立ですが,場所は固定なのでちょっと慣れると
>「ここで落ちると言うことは,ここが保護されてないんだな」と分
>かるようになります.
> まつもと ゆきひろ /:|)
>
--
T.NAKAI nakai@m1.sys.to.casio.co.jp