класс Tracer
Выводит трассировку выполнения программы Ruby на уровне исходного кода.
Это делается путём регистрации обработчика событий с помощью Kernel#set_trace_func для обработки входящих событий. Также предоставляются методы для фильтрации нежелательного трассировочного вывода (см. ::add_filter, ::on и ::off).
Пример
Рассмотрим следующий скрипт Ruby
class A
def square(a)
return a*a
end
end
a = A.new
a.square(5)
Запуск вышеуказанного скрипта с помощью ruby -r tracer example.rb выведет следующую трассировку в стандартный вывод (Обратите внимание, что вы также можете явно require 'tracer')
#0:<internal:lib/rubygems/custom_require>:38:Kernel:<: - #0:example.rb:3::-: class A #0:example.rb:3::C: class A #0:example.rb:4::-: def square(a) #0:example.rb:7::E: end #0:example.rb:9::-: a = A.new #0:example.rb:10::-: a.square(5) #0:example.rb:4:A:>: def square(a) #0:example.rb:5:A:-: return a*a #0:example.rb:6:A:<: end | | | | | | | | | ---------------------+ event | | | ------------------------+ class | | --------------------------+ line | ------------------------------------+ filename ---------------------------------------+ thread
Таблица символов Symbol, используемая для отображения входящих событий:
- +}+
-
вызов C-языковой функции
- +{+
-
возврат из C-языковой функции
- +>+
-
вызов метода Ruby
- +<+
-
возврат из метода Ruby
- +def+
-
начало определения класса или модуля
- +end+
-
окончание определения класса или модуля
- +line+
-
выполнение кода на новой строке
- +^+
-
выброс исключения
Авторские права
Keiju ISHITSUKA (keiju@ishitsuka.com)
Константы
Атрибуты
отображать вызовы C-функций в трассировочном выводе (по умолчанию false)
отображать вызовы C-функций в трассировочном выводе (по умолчанию false)
отображать идентификатор процесса в трассировочном выводе (по умолчанию false)
отображать идентификатор процесса в трассировочном выводе (по умолчанию false)
отображать идентификатор потока в трассировочном выводе (по умолчанию true)
отображать идентификатор потока в трассировочном выводе (по умолчанию true)
поток вывода, используемый для вывода трассировки (по умолчанию STDOUT)
блокировка мьютекса, используемая Tracer для отображения трассировочного вывода
отображать дополнительную отладочную информацию (по умолчанию false)
отображать дополнительную отладочную информацию (по умолчанию false)
Открытые методы класса
# File lib/tracer.rb, line 262 def Tracer.add_filter(p = proc) Single.add_filter(p) end
Используется для фильтрации нежелательного трассировочного вывода
Пример, который выводит только строки кода, выполненные внутри класса Kernel:
Tracer.add_filter do |event, file, line, id, binding, klass, *rest| "Kernel" == klass.to_s end
# File lib/tracer.rb, line 235 def Tracer.off Single.off end
Отключить трассировку
# File lib/tracer.rb, line 224
def Tracer.on
if block_given?
Single.on{yield}
else
Single.on
end
end Начать трассировку
Пример
Tracer.on # code to trace here Tracer.off
Вы также можете передать блок:
Tracer.on {
# trace everything in this block
}
# File lib/tracer.rb, line 249 def Tracer.set_get_line_procs(file_name, p = proc) Single.set_get_line_procs(file_name, p) end
Зарегистрировать обработчик событий p, который вызывается каждый раз, когда выполняется строка в %%%CODE_BLOCK_15%%.
Пример:
Tracer.set_get_line_procs("example.rb", lambda { |line|
puts "line number executed is #{line}"
})
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.