こんばんは、kouyaです。 返信ありがとうございます。 2008/08/09 11:34 Nobuyoshi Nakada <nobu / ruby-lang.org>: > > 現在の1.9では、トレースが必要な場合はバイトコンパイル時に専用の > 命令埋め込むという形で実装していますので、スクリプトをロードした > ときにすでにtracerがロード済みである必要があります。つまり、対象 > スクリプトでrequireするのではなく、-rオプションなどでtracerをロー > ドすれば動くはずです。 > バイトコンパイルについては詳しい事はわからないのですが、 ruby -r tracer で実行しても、やはり1.8, 1.9では出力が違うようです。 また、1.8では、Tracer.onが実行されたなどのトレース出力があるのに対して 1.9では、その出力がありません。 例えば、 #0:t3.rb:2::-: Tracer.on のコロンでかこまれたハイフンを含んだ行が1.9 には無いという事です。 以下、実行した結果となります。 1. ruby -rtracerでスクリプトを実行する。 [kouya:tracer]$ cat t2.rb class Test def test a = 1 b = 2 end end t = Test.new puts t.test [kouya:tracer]$ ruby-trunk -r tracer -v t2.rb ruby 1.9.0 (2008-08-09 revision 18293) [i686-darwin9.4.0] 2 [kouya:tracer]$ ruby -r tracer -v t2.rb ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.2.0] #0:t2.rb:2::-: class Test #0:t2.rb:2:Class:>: class Test #0:t2.rb:2:Class:<: class Test #0:t2.rb:2::C: class Test #0:t2.rb:3::-: def test #0:t2.rb:3:Module:>: def test #0:t2.rb:3:Module:<: def test #0:t2.rb:2::E: class Test #0:t2.rb:9::-: t = Test.new #0:t2.rb:9:Class:>: t = Test.new #0:t2.rb:9:Object:>: t = Test.new #0:t2.rb:9:Object:<: t = Test.new #0:t2.rb:9:Class:<: t = Test.new #0:t2.rb:10::-: puts t.test #0:t2.rb:3:Test:>: def test #0:t2.rb:4:Test:-: a = 1 #0:t2.rb:5:Test:-: b = 2 #0:t2.rb:4:Test:<: a = 1 #0:t2.rb:10:Kernel:>: puts t.test #0:t2.rb:10:Fixnum:>: puts t.test #0:t2.rb:10:Fixnum:<: puts t.test #0:t2.rb:10:IO:>: puts t.test 2#0:t2.rb:10:IO:<: puts t.test #0:t2.rb:10:IO:>: puts t.test #0:t2.rb:10:IO:<: puts t.test #0:t2.rb:10:Kernel:<: puts t.test 2. Tracer.onをスクリプトの中で実行する [kouya:tracer]$ cat t3.rb Tracer.on class Test def test a = 1 b = 2 end end t = Test.new puts t.test [kouya:tracer]$ ruby -v -r tracer t3.rb ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.2.0] #0:t3.rb:2::-: Tracer.on (1.8ではここの出力がある) #0:t3.rb:3::-: class Test #0:t3.rb:3:Class:>: class Test #0:t3.rb:3:Class:<: class Test #0:t3.rb:3::C: class Test #0:t3.rb:4::-: def test #0:t3.rb:4:Module:>: def test #0:t3.rb:4:Module:<: def test #0:t3.rb:3::E: class Test #0:t3.rb:11::-: t = Test.new #0:t3.rb:11:Class:>: t = Test.new #0:t3.rb:11:Object:>: t = Test.new #0:t3.rb:11:Object:<: t = Test.new #0:t3.rb:11:Class:<: t = Test.new #0:t3.rb:12::-: puts t.test #0:t3.rb:4:Test:>: def test #0:t3.rb:5:Test:-: a = 1 #0:t3.rb:6:Test:-: b = 2 #0:t3.rb:5:Test:<: a = 1 #0:t3.rb:12:Kernel:>: puts t.test #0:t3.rb:12:Fixnum:>: puts t.test #0:t3.rb:12:Fixnum:<: puts t.test #0:t3.rb:12:IO:>: puts t.test 2#0:t3.rb:12:IO:<: puts t.test #0:t3.rb:12:IO:>: puts t.test #0:t3.rb:12:IO:<: puts t.test #0:t3.rb:12:Kernel:<: puts t.test [kouya:tracer]$ ruby-trunk -v -r tracer t3.rb ruby 1.9.0 (2008-08-09 revision 18293) [i686-darwin9.4.0] #0:t3.rb:3:Class:>: class Test (1.9ではTracer.onが実行されたというトレースがない) #0:t3.rb:3:Class:<: class Test #0:t3.rb:4:RubyVM::FrozenCore:>: def test #0:t3.rb:4:Module:>: def test #0:t3.rb:4:Module:<: def test #0:t3.rb:4:RubyVM::FrozenCore:<: def test #0:t3.rb:11:Class:>: t = Test.new #0:t3.rb:11:BasicObject:>: t = Test.new #0:t3.rb:11:BasicObject:<: t = Test.new #0:t3.rb:11:Class:<: t = Test.new #0:t3.rb:12:Kernel:>: puts t.test #0:t3.rb:12:IO:>: puts t.test #0:t3.rb:12:Fixnum:>: puts t.test #0:t3.rb:12:Fixnum:<: puts t.test #0:t3.rb:12:IO:>: puts t.test 2#0:t3.rb:12:IO:<: puts t.test #0:t3.rb:12:IO:>: puts t.test #0:t3.rb:12:IO:<: puts t.test #0:t3.rb:12:IO:<: puts t.test #0:t3.rb:12:Kernel:<: puts t.test -- kouya