From: _ wanabe Date: 2010-02-01T20:21:56+09:00 Subject: [ruby-dev:40289] [Bug #1954] line number 0? チケット #1954 が更新されました。 (by _ wanabe) この現象について調べて見ました。すみません、うまく纏められず長い説明になります。 まずはじめに、シグナルを処理するスレッドは 1.8 ではカレント、1.9 ではメインと異なっています。 このため、> start ではなく join になっている の部分は仕様変更によるものと考えられます。 (行番号は 6 のほうが親切な気もしますが、とりあえず本チケットとは無関係と考えます) それから一番の問題である行番号が 0 になる現象についてです。 Ruby プロセスが終了するときには、子スレッド各々の ensure 節を実行しますが この中でさらに例外が発生すると $DEBUG = true ならばメインスレッドまで伝播させようとします。 しかしメインスレッドはすでにクリーンアップ処理中で、トップフレーム以外は積まれておらず そのために行番号が 0 と判断される、ということのようでした。 対策として ・そういうものとして割り切る(仕様変更とする) ・プロセス終了処理中のメインスレッドでの例外は表示しない ・プロセス終了処理中はメインスレッドへ例外を伝播させない ・トップフレームでの例外は表示しない といったものを考えましたが、どうするのが最適かは私にはわかりません。 ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1954 ---------------------------------------- http://redmine.ruby-lang.org