Pry 디버깅

Pry 디버깅 호출

디버거를 호출하려면 코드 어딘가에 binding.pry를 넣으세요. Ruby 인터프리터가 해당 코드에 도달하면 실행이 멈추고 프로그램 상태를 디버깅하기 위해 명령을 입력할 수 있습니다.

Puma나 Sidekiq과 같은 다른 프로세스에서 코드를 디버깅할 때에는 binding.pry_shell을 사용할 수 있습니다. 그런 다음 pry-shell 실행 파일을 사용하여 이 세션에 연결할 수 있습니다. pry-shell 사용 방법에 대한 자세한 내용은 이 비디오를 참고하세요.

경고: binding.pry는 때때로 자동로딩 문제를 겪어 이름 해석 중 실패할 수 있습니다. 필요한 경우, 보다 제한적인 기능 세트를 갖춘 binding.irb를 대신 사용할 수 있습니다.

byebug vs binding.pry vs binding.irb

byebuggdb와 매우 유사한 인터페이스를 갖고 있지만, byebug는 강력한 Pry REPL을 사용하지 않습니다.

binding.pry는 Pry를 사용하지만, 일부 byebug 기능이 부족합니다. GitLab은 pry-byebug 젬을 사용합니다. 이 젬은 byebug의 일부 능력을 binding.pry에 제공하여 가장 강력한 디버깅 기능을 제공합니다.

byebug

전체 명령어 목록에 대한 문서를 확인할 수 있습니다.

pry 명령으로 Pry REPL을 시작할 수 있습니다.

pry

이 문서에서 다루기에는 너무 많은 기능이 엄청나게 있는데, 전체 문서를 확인하려면 Pry 위키로 이동하세요.

아래는 확실히 확인할 가치가 있는 몇 가지 기능이며, Pry 세션에서 help를 실행하여 무엇이 더 가능한지 확인할 수 있습니다.

binding.irb

Ruby 2.7부터 IRB에는 간단한 대화형 디버거가 제공됩니다.

더 자세한 내용은 문서를 확인하세요.

상태 탐색

상태 탐색을 사용하여 코드 내에서 이동하여 메서드 등을 찾을 수 있습니다.

# 컨텍스트 변경
[1] pry(main)> cd Pry
[2] pry(Pry):1>

# 메서드 출력
[2] pry(Pry):1> ls -m

# 메서드 찾기
[3] pry(Pry):1> find-method to_yaml

소스 탐색

pry 세션에서 소스 코드를 살펴볼 수 있습니다:

[1] pry(main)> $ Array#first
# 위의 내용은 다음과 동일합니다.
[2] pry(main)> cd Array
[3] pry(Array):1> show-source first

$show-source의 별칭입니다.

문서 탐색

소스 탐색과 유사하게, 문서 탐색도 가능합니다.

[1] pry(main)> show-doc Array#first

?show-doc의 별칭입니다.

명령어 기록

컨트롤 + R을 사용하여 명령어 기록을 검색할 수 있습니다.

단계별 실행

코드를 단계별로 실행하려면 다음 명령을 사용할 수 있습니다:

  • break: 중단점 관리
  • step: 다음 행 또는 메서드로 실행 포인터를 이동합니다. 여러 번 이동하려면 선택적 숫자 인수를 사용합니다.
  • next: 같은 프레임 내의 다음 행으로 건너뜁니다. 또한 여러 행을 건너뛰기 위해 선택적 숫자 인수를 사용합니다.
  • finish: 현재 스택 프레임이 반환될 때까지 실행합니다.
  • continue: 프로그램 실행을 계속하고 Pry 세션을 종료합니다.

호출 스택 탐색

다음 명령을 사용하여 호출 스택을 이동할 수도 있습니다:

  • backtrace: 현재 스택을 표시합니다. 왼쪽에 있는 번호를 사용하여 frame 명령으로 스택을 탐색할 수 있습니다.
  • up: 스택 프레임을 위로 이동합니다. 여러 프레임을 이동하려면 선택적 숫자 인수를 사용합니다.
  • down: 스택 프레임을 아래로 이동합니다. 여러 프레임을 이동하려면 선택적 숫자 인수를 사용합니다.
  • frame <n>: 특정 프레임으로 이동합니다. 인수 없이 호출하면 현재 프레임을 표시합니다.

단축 명령어

byebug 대신 binding.pry를 사용할 때 s, n, f, c와 같은 단축 명령어는 작동하지 않습니다. 이를 다시 설치하려면 ~/.pryrc에 다음을 추가하세요:

if defined?(PryByebug)
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
  Pry.commands.alias_command 'c', 'continue'
end

마지막 명령어 반복

다음 스니펫을 ~/.pryrc에 넣으면(예: step 또는 next로), Enter 키를 눌러 마지막 명령어를 반복할 수 있습니다.

Pry::Commands.command /^$/, "마지막 명령어 반복" do
  _pry_.run_command Pry.history.to_a.last
end

byebug에서는 이 기능을 기본적으로 지원합니다.