tracer main class
# File tracer.rb, line 149
def Tracer.add_filter(p = proc)
Single.add_filter(p)
end
# File tracer.rb, line 36
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 72
def add_filter(p = proc)
@filters.push p
end
# File tracer.rb, line 80
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 105
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 67
def off
set_trace_func nil
stdout.print "Trace off\n" if Tracer.verbose?
end
# File tracer.rb, line 53
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 76
def set_get_line_procs(file, p = proc)
@get_line_procs[file] = p
end
# File tracer.rb, line 113
def trace_func(event, file, line, id, binding, klass, *)
return if file == __FILE__
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],
line == 0 ? "?\n" : get_line(file, line))
# Thread.critical = saved_crit
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.