From: "NAKAMURA, Hiroshi" Date: 2002-11-13T10:43:39+09:00 Subject: [ruby-dev:18758] Re: Different caller(0) in trace_func when NameError from toplevel between 1.6 and 1.7 なひです。 > From: nobu.nakada@nifty.ne.jp [mailto:nobu.nakada@nifty.ne.jp] > Sent: Wednesday, November 13, 2002 12:37 AM > > 1.6と1.7で、trace_funcで呼び出したcaller(0)の出力が > > 異なる場合があります。なひが把握しているのは、 > > トップレベルでNameErrorを起こした場合です。 > > > > ・set_trace_funcの中でcaller(0) > > ・トップレベルでNameErrorを起こす > > ・現行1.7。 > > トップレベルだとruby_frame->nodeがセットされてないからですね。 > 以下のパッチでどうでしょう。 ばっちりです。1時間で直っちゃいますか。。。さすが。 なひが真面目に追う気が失せちゃいますね(冗談です。 できるだけ他の人に負担かけないように頑張ります ^^;)。 > > 1.6では["trace.rb:3", "trace.rb:4", "trace.rb:5"] > > 1.7では["trace.rb:3", "trace.rb:2"] > > > > という違いです。 > > "trace.rb:5"が出力されてないのは上記の理由ですが、"trace.rb:4" > が"trace.rb:2"になってるのは、1.7ではブロックの位置が開始行になっ > てるからのはずです。Proc#to_sの都合だったかそれ以前の別の理由だっ > たかよく思い出せませんが、こちらのほうが分かりやすいんじゃない > かと思います。 元のメイルでちゃんと書いてないのがいけませんでした。 気になっていた(というか、デバガにとって都合が悪かった) のは、トップレベルの位置がなかったことのほうのみでした。 "trace.rb:4"が"trace.rb:2"に変更されるのは、確かに このほうがわかりやすいと思っています。 本当を言うと"trace.rb:1"がいいんですが、これはもしかすると parse.yかな、と思ってとりあえず後回しにしています。^^; 同様のものとしては、begin、ensure、elseがありますね。