Как отладить Ruby-код без дебаггера?

Минимальный воспроизводимый пример, диагностический вывод, Logger и стек ошибки без утечки данных и сокрытия исключений.

Короткий ответ

Что ответить на собеседовании

Воспроизведите проблему на небольшом примере, проверьте промежуточные значения через p/inspect и изучите стек исключения. Для приложения используйте Logger с уровнями и безопасным контекстом. Локальная переменная с логгером вне def не видна внутри метода: передавайте его аргументом или используйте предусмотренный объект логирования. Не скрывайте ошибку безусловным rescue и не пишите секреты в логи.

Подробный разбор

Ответ с пояснениями

Без пошагового дебаггера полезно сузить проблемный участок и проверить гипотезу о данных. Сначала получите повторяемый вход, ожидаемый результат и фактическую ошибку. Затем ставьте диагностический вывод на границах этапов, а не печатайте всё приложение.

puts подходит для сообщений, а p object использует inspect и помогает увидеть, например, отличие строки от числа. Для больших коллекций выводите размер и небольшой обезличенный пример. Пароли, токены, содержимое резюме и другие персональные данные в такой вывод попадать не должны.

В приложении удобнее Logger:

require "logger"

logger = Logger.new($stdout)
logger.level = Logger::DEBUG

def process_data(data, logger:)
  logger.debug { "process_data input_type=#{data.class}" }
  result = data.upcase
  logger.debug { "process_data output_length=#{result.length}" }
  result
rescue StandardError => error
  logger.error { "process_data failed error_type=#{error.class}" }
  raise
end

process_data("sample", logger: logger)

Логгер передан явно: локальная переменная, созданная снаружи, не захватывается обычным определением def. Повторный raise сохраняет ошибку для вышестоящего обработчика, вместо того чтобы незаметно вернуть nil. Документация Logger.

Стек исключения показывает путь вызовов и место сбоя; проверяйте также первый участок своего кода, а не только строку библиотеки. После локализации закрепите найденный случай небольшой проверкой. Временный подробный вывод уберите или оставьте на управляемом уровне: избыточное логирование способно само изменить тайминги и нагрузку.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку