チケット #1954 が更新されました。 (by Yusuke Endoh) 遠藤です。 > この現象について調べて見ました。 ありがとうございます。 > 対策として > ・そういうものとして割り切る(仕様変更とする) > ・プロセス終了処理中のメインスレッドでの例外は表示しない > ・プロセス終了処理中はメインスレッドへ例外を伝播させない > ・トップフレームでの例外は表示しない > といったものを考えましたが、どうするのが最適かは私にはわかりません。 個人的にはどれでもいいと思います。 別の候補として、0 だったら行番号だけ省略するパッチを書いてみました。 慎重さを要する懸案ではないと思うので、さっさと直してしまいたいと思います。 $ git diff eval.c diff --git a/eval.c b/eval.c index 6deed9c..a1deab6 100644 --- a/eval.c +++ b/eval.c @@ -394,11 +394,16 @@ setup_exception(rb_thread_t *th, int tag, volatile VALUE mesg) PUSH_TAG(); if ((status = EXEC_TAG()) == 0) { RB_GC_GUARD(e) = rb_obj_as_string(e); - if (file) { + if (file && line) { warn_printf("Exception `%s' at %s:%d - %s\n", rb_obj_classname(th->errinfo), file, line, RSTRING_PTR(e)); } + else if (file) { + warn_printf("Exception `%s' at %s - %s\n", + rb_obj_classname(th->errinfo), + file, RSTRING_PTR(e)); + } else { warn_printf("Exception `%s' - %s\n", rb_obj_classname(th->errinfo), $ cat t.rb $DEBUG = true Thread.start do begin Process.kill(:INT, $$) ensure raise end end.join $ ./miniruby t.rb Exception `Interrupt' at t.rb:2 - Exception `RuntimeError' at t.rb:6 - Exception `RuntimeError' at t.rb - t.rb:2:in `join': Interrupt from t.rb:2:in `<main>' -- Yusuke Endoh <mame / tsg.ne.jp> ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1954 ---------------------------------------- http://redmine.ruby-lang.org