Class | Tracer |
In: |
lib/debug.rb
lib/tracer.rb |
Parent: | Object |
tracer main class
EVENT_SYMBOL | = | { "line" => "-", "call" => ">", "return" => "<", "class" => "C", "end" => "E", "c-call" => ">", "c-return" => "<", } |
Single | = | new |
verbose | -> | verbose? |
stdout | [RW] | |
verbose | [RW] |
# File lib/tracer.rb, line 150 150: def Tracer.add_filter(p = proc) 151: Single.add_filter(p) 152: end
# File lib/tracer.rb, line 37 37: def initialize 38: @threads = Hash.new 39: if defined? Thread.main 40: @threads[Thread.main.object_id] = 0 41: else 42: @threads[Thread.current.object_id] = 0 43: end 44: 45: @get_line_procs = {} 46: 47: @filters = [] 48: end
# File lib/tracer.rb, line 134 134: def Tracer.on 135: if block_given? 136: Single.on{yield} 137: else 138: Single.on 139: end 140: end
# File lib/tracer.rb, line 146 146: def Tracer.set_get_line_procs(file_name, p = proc) 147: Single.set_get_line_procs(file_name, p) 148: end
# File lib/tracer.rb, line 81 81: def get_line(file, line) 82: if p = @get_line_procs[file] 83: return p.call(line) 84: end 85: 86: unless list = SCRIPT_LINES__[file] 87: begin 88: f = open(file) 89: begin 90: SCRIPT_LINES__[file] = list = f.readlines 91: ensure 92: f.close 93: end 94: rescue 95: SCRIPT_LINES__[file] = list = [] 96: end 97: end 98: 99: if l = list[line - 1] 100: l 101: else 102: "-\n" 103: end 104: end
# File lib/tracer.rb, line 106 106: def get_thread_no 107: if no = @threads[Thread.current.object_id] 108: no 109: else 110: @threads[Thread.current.object_id] = @threads.size 111: end 112: end
# File lib/tracer.rb, line 68 68: def off 69: set_trace_func nil 70: stdout.print "Trace off\n" if Tracer.verbose? 71: end
# File lib/tracer.rb, line 54 54: def on 55: if block_given? 56: on 57: begin 58: yield 59: ensure 60: off 61: end 62: else 63: set_trace_func method(:trace_func).to_proc 64: stdout.print "Trace on\n" if Tracer.verbose? 65: end 66: end
# File lib/tracer.rb, line 77 77: def set_get_line_procs(file, p = proc) 78: @get_line_procs[file] = p 79: end
# File lib/tracer.rb, line 114 114: def trace_func(event, file, line, id, binding, klass, *) 115: return if file == __FILE__ 116: 117: for p in @filters 118: return unless p.call event, file, line, id, binding, klass 119: end 120: 121: saved_crit = Thread.critical 122: Thread.critical = true 123: stdout.printf("#%d:%s:%d:%s:%s: %s", 124: get_thread_no, 125: file, 126: line, 127: klass || '', 128: EVENT_SYMBOL[event], 129: get_line(file, line)) 130: Thread.critical = saved_crit 131: end