Spec-Zone.ru › Ruby 2.6

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

Константы

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]

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

verbose[RW]

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

verbose?[RW]

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

Публичные методы класса

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

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

on() { || ... } Показать исходный код
# File lib/tracer.rb, line 226
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 251
def Tracer.set_get_line_procs(file_name, p = proc)
  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–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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