実行トレース出力をとる機能を提供するクラスです。
add_filter(proc)[permalink][rdoc]add_filter {|event, file, line, id, binding, klass| .... }トレース出力するかどうかを決定するフィルタを追加します。何もフィルタを与えない場合はすべての行についてトレース情報が出力されます。与えられた手続き(ブロックまたはProcオブジェクト)が真を返せばトレースは出力されます。
フィルタは複数追加でき、そのうち一つでも偽を返すとトレースの出力は抑制されます。
フィルタ手続きは引数として event, file, line, id, binding, klass の 6 つをとります。 Kernel.#set_trace_func で指定するものとほぼ同じです。
イベントを表す文字列。以下の種類がある。カッコ内は tracer の出力での表記。
* line (-) ある行を実行 * call (>) メソッド呼び出し * return (<) メソッドからのリターン * class (C) クラスコンテキストに入った * end (E) クラスコンテキストから出た * raise 例外が発生した * c-call Cで記述されたメソッドが呼ばれた * c-return Cで記述されたメソッドからreturn
現在処理しているファイルの名前
現在処理している行番号
最後に呼び出されたメソッドのメソッド名(のシンボル) そのようなメソッドがなければ0になる。
現在のコンテキスト
現在呼び出されているメソッドのクラスオブジェクト。
display_c_call -> bool[permalink][rdoc]display_c_call? -> bool真ならば、ビルトインメソッドの呼び出しを表示します。デフォルトは偽です。
display_c_call=(flag)[permalink][rdoc]ビルトインメソッドの呼び出しを表示するかどうかを設定します。
display_process_id -> bool[permalink][rdoc]display_process_id? -> bool真ならば、プロセス ID を表示します。デフォルトは、偽です。
display_process_id=(flag)[permalink][rdoc]プロセス ID を表示するかどうかを設定します。
display_thread_id -> bool[permalink][rdoc]display_thread_id? -> bool真ならば、スレッド ID を表示します。デフォルトは、真です。
display_thread_id=(flag)[permalink][rdoc]スレッド ID を表示するかどうかを設定します。
new[permalink][rdoc]自身を初期化します。
off -> nil[permalink][rdoc]トレース出力を中断します。トレース出力を開始するには、Tracer.onを使用します。
[SEE_ALSO] Tracer.on
on -> nil[permalink][rdoc]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)[permalink][rdoc]set_get_line_procs(filename) {|line| .... }あるファイルについて利用する、行番号からソースのその行の内容を返す手続きを指定します。何も指定しなければデフォルトの動作が利用されます。指定する手続きは行番号を唯一の引数として呼び出されます。
# 例 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[permalink][rdoc]トレース出力先を参照します。
stdout=(fp)[permalink][rdoc]トレース出力先を変更します。
require 'tracer'
fp = File.open('temptrace.txt', "w")
Tracer.stdout = fp
Tracer.on {
puts "Hello"
}
fp.close
stdout_mutex -> Mutex[permalink][rdoc][TODO]
verbose -> bool[permalink][rdoc]verbose? -> bool真ならばトレース出力の開始や終了を知らせます。
verbose=(flag)[permalink][rdoc]トレース出力の開始や終了を知らせる文字列("Trace on"または"Trace off")が必要なら真を設定します。
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
add_filter(p = proc)[permalink][rdoc][TODO]
フィルターを追加します。
get_line(file, line) -> String[permalink][rdoc][TODO]
get_thread_no -> Integer[permalink][rdoc][TODO]
off -> ()[permalink][rdoc]トレース出力を中断します。
on -> ()[permalink][rdoc]on { ... } -> ()トレース出力を再開します。
ブロックを与えるとブロックの実行中のみトレースを出力します。
set_get_line_procs(file, p = proc)[permalink][rdoc][TODO]
stdout -> IO[permalink][rdoc][SEE_ALSO] Tracer.stdout
trace_func(event, file, line, id, binding, klass, *) -> object | nil[permalink][rdoc][TODO]
EVENT_SYMBOL[permalink][rdoc]トレース出力のシンボルのハッシュです。下記のような文字列があります。
EVENT_SYMBOL = {
"line" => "-",
"call" => ">",
"return" => "<",
"class" => "C",
"end" => "E",
"c-call" => ">",
"c-return" => "<",
}
[SEE_ALSO] Tracer.add_filter
Single -> Tracer[permalink][rdoc][TODO]