class Tracer

要約

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

目次

特異メソッド
インスタンスメソッド
定数

特異メソッド

add_filter(proc)[permalink][rdoc]
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

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

display_c_call -> bool[permalink][rdoc]
display_c_call? -> bool

真ならば、ビルトインメソッドの呼び出しを表示します。デフォルトは偽です。

display_c_call=(flag)[permalink][rdoc]

ビルトインメソッドの呼び出しを表示するかどうかを設定します。

[PARAM] flag:
ビルトインメソッドの呼び出しを表示するならば、真を指定します。
display_process_id -> bool[permalink][rdoc]
display_process_id? -> bool

真ならば、プロセス ID を表示します。デフォルトは、偽です。

display_process_id=(flag)[permalink][rdoc]

プロセス ID を表示するかどうかを設定します。

[PARAM] flag:
プロセス ID を表示するならば、真を指定します。
display_thread_id -> bool[permalink][rdoc]
display_thread_id? -> bool

真ならば、スレッド ID を表示します。デフォルトは、真です。

display_thread_id=(flag)[permalink][rdoc]

スレッド ID を表示するかどうかを設定します。

[PARAM] flag:
スレッド 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| .... }

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

[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[permalink][rdoc]

トレース出力先を参照します。

stdout=(fp)[permalink][rdoc]

トレース出力先を変更します。

[PARAM] fp:
新しいトレース出力先を指定します。
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")が必要なら真を設定します。

[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

インスタンスメソッド

add_filter(p = proc)[permalink][rdoc]

[TODO]

フィルターを追加します。

[PARAM] p:
Proc オブジェクトを指定します。
get_line(file, line) -> String[permalink][rdoc]

[TODO]

[PARAM] file:
[PARAM] line:
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]