Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > tracerライブラリ > Tracerクラス

class Tracer

クラスの継承リスト: Tracer < Object < Kernel < BasicObject

Abstract

実行トレース出力をとる機能を提供するクラスです。

特異メソッド

add_filter(proc)
add_filter {|event, file, line, id, binding, klass| .... }

トレース出力するかどうかを決定するフィルタを追加します。 何もフィルタを与えない場合はすべての行についてトレース情報が出力されます。 与えられた手続き(ブロックまたはProcオブジェクト)が真を返せば トレースは出力されます。

フィルタは複数追加でき、 そのうち一つでも偽を返すとトレースの出力は抑制される。

[PARAM] proc:
トレース出力するかどうかを決定する手続きオブジェクトを指定します。 通常、true か falseを返す必要があります。

フィルタ手続きは引数として event, file, line, id, binding, klass の 6 つをとります。 Kernel.#set_trace_func で指定するものとほぼ同じです。

フィルタ手続きのパラメータ

event

イベントを表す文字列。 以下の種類がある。カッコ内は tracer の出力での表記。

  * line (-)   ある行を実行
  * call (>)   メソッド呼び出し
  * return (<) メソッドからのリターン
  * class (C)  クラスコンテキストに入った
  * end (E)    クラスコンテキストから出た
  * raise      例外が発生した
  * c-call     Cで記述されたメソッドが呼ばれた
  * c-return   Cで記述されたメソッドからreturn
file

現在処理しているファイルの名前

line

現在処理している行番号

id

最後に呼び出されたメソッドのメソッド名(のシンボル) そのようなメソッドがなければ0になる。

binding

現在のコンテキスト

klass

現在呼び出されているメソッドのクラスオブジェクト。

off -> nil

トレース出力を中断します。 トレース出力を開始するには、Tracer.onを使用します。

[SEE_ALSO] Tracer.on

on -> nil
on {...}

トレース出力を開始します。 ブロックを与えられた場合はそのブロック内のみトレース出力を行います。

require 'tracer'

Tracer.on
class Test
  def test
    b = 2
  end
end

t = Test.new
t.test

[SEE_ALSO] Tracer.off

set_get_line_procs(filename, proc)
set_get_line_procs(filename) {|line| .... }

あるファイルについて利用する、行番号からソースのその行の内容を返す 手続きを指定する。何も指定しなければデフォルトの動作が利用される。 指定する手続きは行番号を唯一の引数として呼び出される。

[PARAM] filename:
ソースファイルの場所を文字列で指定します。
[PARAM] proc:
通常、文字列を返す手続きオブジェクトを指定します。
# 例 dummy.rb の3行目から6 行目のトレース出力に !! をつける
require 'tracer'

Tracer.set_get_line_procs('./dummy.rb'){|line|
  str = "\n"
  str = "!!\n" if line >= 3 and line <= 6
  str
}
Tracer.on
require 'dummy'

dm = Dummy.new
puts dm.number

=begin
# dummy.rb
class Dummy
  def initialize
    @number = 135
  end
  attr :number
end
=end
stdout -> Object
stdout=(fp)

トレース出力先をIOオブジェクトなどに変更したり、参照することができます。

[PARAM] fp:
トレース出力をfp に変更します。
require 'tracer'

fp = File.open('temptrace.txt', "w")
Tracer.stdout = fp
Tracer.on {
  puts "Hello"
}
fp.close
verbose -> bool
verbose? -> bool
verbose=(flag)

トレース出力の開始や終了を知らせる文字列("Trace on"または"Trace off")が必要ならtrueを設定します。

[PARAM] flag:
トレース出力の開始や終了を知らせる文字列が必要ならtrueを設定します。
require 'tracer'

Tracer.verbose = true
Tracer.on {
  puts "Hello"
}

# 出力例
Trace on
#0:t5.rb:7::-:   puts "Hello"
#0:t5.rb:7:Kernel:>:   puts "Hello"
#0:t5.rb:7:IO:>:   puts "Hello"
Hello#0:t5.rb:7:IO:<:   puts "Hello"
#0:t5.rb:7:IO:>:   puts "Hello"

#0:t5.rb:7:IO:<:   puts "Hello"
#0:t5.rb:7:Kernel:<:   puts "Hello"
Trace off

定数

EVENT_SYMBOL

トレース出力のシンボルのハッシュです。 下記のような文字列があります。

EVENT_SYMBOL = {
  "line" => "-",
  "call" => ">",
  "return" => "<",
  "class" => "C",
  "end" => "E",
  "c-call" => ">",
  "c-return" => "<",
}

[SEE_ALSO] Tracer.add_filter

Methods

Classes