Spec-Zone.ru › Ruby 2.2

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

Символ таблица, используемая для отображения входящих событий:

+}+

вызов C-функции

+{+

возврат из C-функции

+>+

вызов метода Ruby

C

начало определения класса или модуля

E

окончание определения класса или модуля

-

выполнение кода в новой строке

+^+

выбрасывание исключения

+<+

возврат из метода Ruby

Авторские права

Кеидзу Исицука (keiju@ishitsuka.com)

Константы

EVENT_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 263
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 236
def Tracer.off
  Single.off
end

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

on() { || ... } Показать исходный код
# File lib/tracer.rb, line 225
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 250
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