Class | Tracer |
In: |
tracer.rb
|
Parent: | Object |
tracer main class
MY_FILE_NAME | = | caller(0)[0].scan(/^(.*):[0-9]+$/)[0][0] |
EVENT_SYMBOL | = | { "line" => "-", "call" => ">", "return" => "<", "class" => "C", "end" => "E", "c-call" => ">", "c-return" => "<", } |
Single | = | new |
verbose | -> | verbose? |
stdout | [RW] | |
verbose | [RW] |
# File tracer.rb, line 39 def initialize @threads = Hash.new if defined? Thread.main @threads[Thread.main.object_id] = 0 else @threads[Thread.current.object_id] = 0 end @get_line_procs = {} @filters = [] end
# File tracer.rb, line 147 def Tracer.set_get_line_procs(file_name, p = proc) Single.set_get_line_procs(file_name, p) end
# File tracer.rb, line 83 def get_line(file, line) if p = @get_line_procs[file] return p.call(line) end unless list = SCRIPT_LINES__[file] begin f = open(file) begin SCRIPT_LINES__[file] = list = f.readlines ensure f.close end rescue SCRIPT_LINES__[file] = list = [] end end if l = list[line - 1] l else "-\n" end end
# File tracer.rb, line 107 def get_thread_no if no = @threads[Thread.current.object_id] no else @threads[Thread.current.object_id] = @threads.size end end
# File tracer.rb, line 70 def off set_trace_func nil stdout.print "Trace off\n" if Tracer.verbose? end
# File tracer.rb, line 56 def on if block_given? on begin yield ensure off end else set_trace_func method(:trace_func).to_proc stdout.print "Trace on\n" if Tracer.verbose? end end
# File tracer.rb, line 115 def trace_func(event, file, line, id, binding, klass, *) return if file == MY_FILE_NAME for p in @filters return unless p.call event, file, line, id, binding, klass end saved_crit = Thread.critical Thread.critical = true stdout.printf("#%d:%s:%d:%s:%s: %s", get_thread_no, file, line, klass || '', EVENT_SYMBOL[event], get_line(file, line)) Thread.critical = saved_crit end