InfoGrab DocsInfoGrab Docs

Pry 디버깅

요약

디버거를 호출하려면 코드의 원하는 위치에 binding.pry를 넣습니다. Puma 나 Sidekiq처럼 다른 프로세스에서 실행되는 코드를 디버깅할 때는 binding.pry_shell을 사용할 수 있습니다. binding.pry는 간혹 오토로딩 문제로 이름 확인에 실패하기도 합니다.

pry 디버깅 호출#

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

Puma 나 Sidekiq처럼 다른 프로세스에서 실행되는 코드를 디버깅할 때는 binding.pry_shell을 사용할 수 있습니다. 그런 다음 pry-shell 실행 파일로 이 세션에 연결합니다. pry-shell 사용 방법에 관한 자세한 내용은 이 영상에서 확인할 수 있습니다.

Warning

binding.pry는 간혹 오토로딩 문제로 이름 확인에 실패하기도 합니다. 필요하다면 기능 범위가 더 제한적인 binding.irb를 대신 사용할 수 있습니다.

byebug와 binding.irb, binding.pry의 차이#

byebug는 gdb와 매우 비슷한 인터페이스를 제공하지만, 강력한 기능을 갖춘 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를 실행하면 그 밖에 어떤 작업을 할 수 있는지 확인할 수 있습니다.

상태 탐색#

상태 탐색 기능으로 코드를 이동하면서 메서드 등을 확인할 수 있습니다.

# Change context
[1] pry(main)> cd Pry
[2] pry(Pry):1>

# Print methods
[2] pry(Pry):1> ls -m

# Find a method
[3] pry(Pry):1> find-method to_yaml

소스 코드 탐색#

pry 세션에서 소스 코드를 확인할 수 있습니다.

[1] pry(main)> $ Array#first
# The above is equivalent to
[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는 이 기능을 기본으로 지원합니다.

Pry 디버깅

GitLab v19.4
원문 보기

요약

디버거를 호출하려면 코드의 원하는 위치에 binding.pry를 넣습니다. Puma 나 Sidekiq처럼 다른 프로세스에서 실행되는 코드를 디버깅할 때는 binding.pry_shell을 사용할 수 있습니다. binding.pry는 간혹 오토로딩 문제로 이름 확인에 실패하기도 합니다.

pry 디버깅 호출#

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

Puma 나 Sidekiq처럼 다른 프로세스에서 실행되는 코드를 디버깅할 때는 binding.pry_shell을 사용할 수 있습니다. 그런 다음 pry-shell 실행 파일로 이 세션에 연결합니다. pry-shell 사용 방법에 관한 자세한 내용은 이 영상에서 확인할 수 있습니다.

Warning

binding.pry는 간혹 오토로딩 문제로 이름 확인에 실패하기도 합니다. 필요하다면 기능 범위가 더 제한적인 binding.irb를 대신 사용할 수 있습니다.

byebug와 binding.irb, binding.pry의 차이#

byebug는 gdb와 매우 비슷한 인터페이스를 제공하지만, 강력한 기능을 갖춘 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를 실행하면 그 밖에 어떤 작업을 할 수 있는지 확인할 수 있습니다.

상태 탐색#

상태 탐색 기능으로 코드를 이동하면서 메서드 등을 확인할 수 있습니다.

# Change context
[1] pry(main)> cd Pry
[2] pry(Pry):1>

# Print methods
[2] pry(Pry):1> ls -m

# Find a method
[3] pry(Pry):1> find-method to_yaml

소스 코드 탐색#

pry 세션에서 소스 코드를 확인할 수 있습니다.

[1] pry(main)> $ Array#first
# The above is equivalent to
[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는 이 기능을 기본으로 지원합니다.