Spec-Zone.ru › Ruby 2.5

класс 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)

Константы

EVENT_SYMBOL

Таблица символов Symbol, используемая для отображения трассировочной информации

Single

Ссылка на единственный экземпляр Tracer

display_c_call
display_process_id
display_thread_id
stdout
verbose

Атрибуты

display_c_call[RW]

отображать вызовы C-функций в трассировочном выводе (по умолчанию false)

display_c_call?[RW]

отображать вызовы C-функций в трассировочном выводе (по умолчанию false)

display_process_id[RW]

отображать идентификатор процесса в трассировочном выводе (по умолчанию false)

display_process_id?[RW]

отображать идентификатор процесса в трассировочном выводе (по умолчанию false)

display_thread_id[RW]

отображать идентификатор потока в трассировочном выводе (по умолчанию true)

display_thread_id?[RW]

отображать идентификатор потока в трассировочном выводе (по умолчанию true)

stdout[RW]

поток вывода, используемый для вывода трассировки (по умолчанию STDOUT)

stdout_mutex[R]

блокировка мьютекса, используемая Tracer для отображения трассировочного вывода

verbose[RW]

отображать дополнительную отладочную информацию (по умолчанию false)

verbose?[RW]

отображать дополнительную отладочную информацию (по умолчанию false)

Открытые методы класса

add_filter(p = proc) Показать исходный код
# 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
off() Показать исходный код
# File lib/tracer.rb, line 235
def Tracer.off
  Single.off
end

Отключить трассировку

on() { || ... } Показать исходный код
# 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
}
set_get_line_procs(file_name, p = proc) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API