класс Tracer
Выводит трассировку выполнения программы Ruby на уровне исходного кода.
Для этого он регистрирует обработчик событий с помощью Kernel#set_trace_func для обработки входящих событий. Он также предоставляет методы для фильтрации нежелательного вывода трассировки (см. Tracer.add_filter, Tracer.on и Tracer.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
-
C -
начало определения класса или модуля
-
E -
завершение определения класса или модуля
-
- -
выполнение кода в новой строке
- +^+
-
выбрасывание исключения
- +<+
-
возврат из метода Ruby
Авторские права
Keiju ISHITSUKA (keiju@ishitsuka.com)
Константы
Атрибуты
отображение вызовов C-функций в выводе трассировки (по умолчанию false)
отображение вызовов C-функций в выводе трассировки (по умолчанию false)
отображение идентификатора процесса в выводе трассировки (по умолчанию false)
отображение идентификатора процесса в выводе трассировки (по умолчанию false)
отображение идентификатора потока в выводе трассировки (по умолчанию true)
отображение идентификатора потока в выводе трассировки (по умолчанию true)
поток вывода, используемый для вывода трассировки (по умолчанию стандартный вывод)
взаимный исключение, используемый трассировщиком для отображения вывода трассировки
отображение дополнительной отладочной информации (по умолчанию false)
отображение дополнительной отладочной информации (по умолчанию false)
Публичные методы класса
# File lib/tracer.rb, line 268 def Tracer.add_filter(p = nil, &b) p ||= b 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 240 def Tracer.off Single.off end
Отключить трассировку
# File lib/tracer.rb, line 229
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 254 def Tracer.set_get_line_procs(file_name, p = nil, &b) p ||= b Single.set_get_line_procs(file_name, p) end
Регистрирует обработчик событий p, который вызывается каждый раз, когда выполняется строка кода в файле file_name.
Пример:
Tracer.set_get_line_procs("example.rb", lambda { |line|
puts "line number executed is #{line}"
})
Ruby Core © 1993–2020 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.