Rails 개발을 하다 보면 콘솔을 정말 자주 사용하게 됩니다. 그리고 이제는 모두가 동의하고 있죠. Pry는 Rails 콘솔 역사상 가장 훌륭한 도구라는 사실을요.
Pry에는 기본적으로 내장된 몇 가지 강력한 기능이 있어서, 예전의 낡은 IRB보다 훨씬 쉽게 예외를 다룰 수 있습니다.
전체 백트레이스 확인하기
Pry(물론 IRB도 마찬가지)에서 예외가 발생하면 축약된 형태의 백트레이스가 화면에 출력됩니다. 대부분의 경우 이 정도면 충분하지만, 항상 그런 것은 아닙니다.
Pry에서는 wtf -v 명령어를 사용해 가장 최근에 발생한 예외의 전체 백트레이스를 확인할 수 있습니다. -v 플래그를 빼고 실행하면 축약된 백트레이스만 표시됩니다.
wtf 명령어로 가장 최근의 백트레이스에 접근하기
예외 데이터에 접근하기
예외 객체에는 흥미로운 데이터가 함께 담겨 있는 경우가 많습니다. IRB에서 예외가 발생하면 클래스 이름과 에러 메시지만 볼 수 있지만, Pry에서는 실제 예외 객체에 직접 접근할 수 있습니다. 즉, 필요한 데이터를 원하는 대로 꺼내 쓸 수 있다는 뜻입니다.
가장 최근에 발생한 예외를 가져오려면 _ex_ 변수를 사용하세요. Ruby의 내장 변수인 $!와 달리, rescue 블록 안에 있지 않아도 언제든 자유롭게 사용할 수 있습니다.
_ex_ 지역 변수로 가장 최근의 예외에 접근하기
예외 표시 방식 커스터마이징하기
Pry를 사용할 때마다 항상 전체 백트레이스를 보고 싶다고 가정해 봅시다. 기본 예외 핸들러를 재정의하면 그렇게 할 수 있습니다.
~/.pryrc 파일을 열어 아래와 같이 작성하기만 하면 됩니다:
# 이 코드는 Pry의 기본 예외 핸들러를 거의 그대로 가져온 것입니다.
# 원본은 여기서 확인할 수 있습니다: https://github.com/pry/pry/blob/master/lib/pry.rb
Pry.config.exception_handler = proc do |output, exception, _|
if UserError === exception && SyntaxError === exception
output.puts "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}"
else
output.puts "#{exception.class}: #{exception.message}"
output.puts "from #{exception.backtrace}"
end
end
심지어 Pry에서 발생하는 모든 예외를 Honeybadger 같은 에러 추적 서비스에 기록하는 것처럼, 좀 더 과감한 활용도 가능합니다. :)