Spec-Zone.ru › Ruby on Rails 6.1

класс ActiveSupport::BacktraceCleaner

Родитель:
Объект

Стек вызовов часто содержит множество строк, не имеющих отношения к рассматриваемому контексту. Это затрудняет поиск сигнала среди шума стека вызовов и увеличивает время отладки. С помощью BacktraceCleaner, используются фильтры и заглушители для удаления ненужных строк, оставляя только наиболее релевантные.

Фильтры используются для модификации строк данных, а заглушители — для полного удаления строк. Типичный случай использования фильтров — удаление длинных путей из начала каждой строки и отображение путей файлов, относящихся к каталогу приложения, вместо корня файловой системы. Типичный случай использования заглушителей — исключение вывода шумной библиотеки из стека вызовов, чтобы сосредоточиться на остальном.

bc = ActiveSupport::BacktraceCleaner.new
bc.add_filter   { |line| line.gsub(Rails.root.to_s, '') } # strip the Rails.root prefix
bc.add_silencer { |line| /puma|rubygems/.match?(line) } # skip any lines from puma or rubygems
bc.clean(exception.backtrace) # perform the cleanup

Для переконфигурации существующего BacktraceCleaner (например, по умолчанию в Rails) и отображения как можно большего количества данных, вы всегда можете вызвать BacktraceCleaner#remove_silencers!, что восстановит стек вызовов в первоначальном состоянии. Если вам нужно переконфигурировать существующий BacktraceCleaner, чтобы он не фильтровал или не изменял пути ни одной строки стека вызовов, вы можете вызвать BacktraceCleaner#remove_filters!. Эти два метода обеспечат вам полностью нетронутый стек вызовов.

Вдохновлено плагином Quiet Backtrace от thoughtbot.

Константы

FORMATTED_GEMS_PATTERN

Общедоступные методы класса

new() Показать исходный код
# File activesupport/lib/active_support/backtrace_cleaner.rb, line 32
def initialize
  @filters, @silencers = [], []
  add_gem_filter
  add_gem_silencer
  add_stdlib_silencer
end

Общедоступные методы экземпляра

add_filter(&block) Показать исходный код
# File activesupport/lib/active_support/backtrace_cleaner.rb, line 60
def add_filter(&block)
  @filters << block
end

Добавляет фильтр из переданного блока. Каждая строка в стеке вызовов будет сопоставлена с этим фильтром.

# Will turn "/my/rails/root/app/models/person.rb" into "/app/models/person.rb"
backtrace_cleaner.add_filter { |line| line.gsub(Rails.root, '') }
add_silencer(&block) Показать исходный код
# File activesupport/lib/active_support/backtrace_cleaner.rb, line 69
def add_silencer(&block)
  @silencers << block
end

Добавляет заглушитель из переданного блока. Если заглушитель возвращает true для данной строки, она будет исключена из очищенного стека вызовов.

# Will reject all lines that include the word "puma", like "/gems/puma/server.rb" or "/app/my_puma_server/rb"
backtrace_cleaner.add_silencer { |line| /puma/.match?(line) }
clean(backtrace, kind = :silent) Показать исходный код
# File activesupport/lib/active_support/backtrace_cleaner.rb, line 41
def clean(backtrace, kind = :silent)
  filtered = filter_backtrace(backtrace)

  case kind
  when :silent
    silence(filtered)
  when :noise
    noise(filtered)
  else
    filtered
  end
end

Возвращает стек вызовов после применения всех фильтров и заглушителей. Фильтры применяются сначала, затем заглушители.

Также алиасируется как: filter
filter(backtrace, kind = :silent)
Псевдоним для: clean
remove_filters!() Показать исходный код
# File activesupport/lib/active_support/backtrace_cleaner.rb, line 83
def remove_filters!
  @filters = []
end

Удаляет все фильтры, но оставляет заглушители. Полезно, если вам внезапно нужно увидеть полные пути файлов в стеке вызовов, которые вы уже отфильтровали.

remove_silencers!() Показать исходный код
# File activesupport/lib/active_support/backtrace_cleaner.rb, line 76
def remove_silencers!
  @silencers = []
end

Удаляет все заглушители, но оставляет фильтры. Полезно, если ваш контекст отладки внезапно расширился, так как вы подозреваете ошибку в одной из используемых библиотек.

© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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