Pry 디버깅
GitLab v19.1디버거를 호출하려면, 코드 어딘가에 binding.pry를 배치합니다. Puma나 Sidekiq과 같은 다른 프로세스에서 코드를 디버깅할 때는 binding.pry_shell을 사용할 수 있습니다. binding.pry는 때때로 자동 로딩 문제가 발생하여 이름 확인 중에 실패할 수 있습니다.
디버거 호출#
디버거를 호출하려면, 코드 어딘가에 binding.pry를 배치합니다.
Ruby 인터프리터가 해당 코드에 도달하면 실행이 중단되고,
명령어를 입력하여 프로그램 상태를 디버깅할 수 있습니다.
Puma나 Sidekiq과 같은 다른 프로세스에서 코드를 디버깅할 때는 binding.pry_shell을 사용할 수 있습니다.
그런 다음 pry-shell 실행 파일을 사용하여 이 세션에 연결할 수 있습니다.
pry-shell 사용 방법에 대한 자세한 내용은 이 동영상을 참고하세요.
binding.pry는 때때로 자동 로딩 문제가 발생하여 이름 확인 중에 실패할 수 있습니다.
필요한 경우, 더 제한된 기능 세트를 가진 binding.irb를 대신 사용할 수 있습니다.
byebug vs binding.irb vs binding.pry#
byebug는 gdb와 매우 유사한 인터페이스를 가지고 있지만, byebug는
강력한 Pry REPL을 사용하지 않습니다.
binding.pry는 Pry를 사용하지만, byebug의 일부 기능이 부족합니다.
GitLab은 pry-byebug gem을 사용합니다.
이 gem은 byebug의 일부 기능을 binding.pry에 추가하므로,
이를 사용하면 가장 강력한 디버깅 기능을 활용할 수 있습니다.
byebug#
전체 명령어 목록은 문서를 참고하세요.
pry 명령어로 Pry REPL을 시작할 수 있습니다.
binding.irb#
Ruby 2.7부터 IRB에 간단한 대화형 디버거가 내장되어 있습니다.
자세한 내용은 문서를 참고하세요.
pry#
pry에는 매우 많은 기능이 있어 이 문서에서 모두 다루기 어려우므로,
전체 문서는 Pry wiki를 참고하세요.
아래는 꼭 확인해볼 만한 몇 가지 기능이며, pry 세션에서 help를 실행하여
그 외에 할 수 있는 것들도 확인하세요.
상태 탐색#
상태 탐색을 사용하면 코드를 탐색하며 메서드 등을 발견할 수 있습니다:
# 컨텍스트 변경
[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의 별칭입니다.
명령어 히스토리#
Control + 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에 다음 스니펫을 배치하면, Enter 키를 누르는 것만으로
마지막 명령어를 반복할 수 있습니다 (예: step이나 next 사용 시):
Pry::Commands.command /^$/, "repeat last command" do
_pry_.run_command Pry.history.to_a.last
end
byebug는 이 기능을 기본으로 지원합니다.