tracer main class
# File tracer.rb, line 150
def Tracer.add_filter(p = proc)
Single.add_filter(p)
end
# File tracer.rb, line 37
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 73
def add_filter(p = proc)
@filters.push p
end
# File tracer.rb, line 81
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 106
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 68
def off
set_trace_func nil
stdout.print "Trace off\n" if Tracer.verbose?
end
# File tracer.rb, line 54
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 77
def set_get_line_procs(file, p = proc)
@get_line_procs[file] = p
end
# File tracer.rb, line 114
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],
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 see Improve the docs, or visit Documenting-ruby.org.