こんばんは、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