Ruby Pry로 루프에서 나가려면 어떻게해야합니까?


212

Rails 애플리케이션에서 Pry를 사용하고 있습니다. binding.pry모델에서 루프 내부를 설정 하여 문제를 시도하고 디버그했습니다. 예를 들면 다음과 같습니다.

(1..100).each do |i|
  binding.pry
  puts i
end

내가 입력 quit하면 다음 반복으로 이동하고 다시 중지됩니다. 루프에서 벗어날 수있는 방법이 quit있습니까? 100 번 입력하지 않아도 됩니까?

현재 나가는 방법을 아는 유일한 방법은 CTRL+ 를 사용 C하고 응용 프로그램을 다시 시작하는 것입니다.

답변:


412

무조건 Pry를 종료하려면 다음을 입력하십시오.

exit-program

@ Nick의 의견에서 편집 : 또한 작동합니다 :

!!!

감사합니다 @ Evandro, 바로 내가 찾던 것입니다!
Ryan

분명히 바인딩을 바로 exit잡을 수는 있지만 사용하면 프로그램이 계속 실행될 수 있습니다.
AJP

1
이것은 달리는 동안 나에게 효과가 없었습니다 rspec. 그러나 CTRL-C는 두 번했다.
Eric Walker

5
Mac OSX에서 Ctrl + C두 번 누르면 Pry 세션이 종료되지만 해당 터미널 창도 효과적으로 종료됩니다. 후속 출력은 글리치되어 터미널 탭을 닫고 새 탭으로 이동해야합니다. 그러나이 !!!악화 효과는 없습니다.
토퍼 헌트

@Evandro 당신은 이것이 어떻게 나를 구했는지 전혀 모른다!
스리 하샤 카 팔라

111

나는 사용한다:

disable-pry

이렇게하면 프로그램이 계속 실행되지만 실행을 계속 중지 할 수는 없습니다. 이것은 콘솔에서 디버깅 할 때 특히 유용합니다.


11
(명령 줄에서) 다시 활성화하려면 : ENV [ 'DISABLE_PRY'] = nil
stebooks

2
disable-pry를 사용한 후 pry를 다시 입력 할 수 없습니다. ENV [ 'DISABLE_PRY'] = nil을 사용한 후에도
daslicious

2
다시 들어 오려면 ENV['DISABLE_PRY'] = nil명령 줄 또는 레일 콘솔이 아닌 컨트롤러 에 설정 하기 만하면됩니다.
아툴 칸 두리

이것은 가드를 사용할 때 사용하고 완벽한 테스트 실행을 위해 멈추기를 원할 때 사용하는 완벽한 방법입니다. 다음 테스트 실행시 재설정됩니다.
BBonifield

31

모든 것을 종료하려면 다음을 사용하십시오.

exit!

모든 진행중인 바인딩을 무시해야합니다.


4
또한 동시에 서버가 종료됩니다. exit-program서버를 다시 시작하지 않으려는 경우 여전히 최선의 옵션입니다.
Ryan

3
그냥 명확하게 exit-program당신이 당신의 유지 보수 할 수 있습니다 rails server세션을하지만 던질 것SystemExit
앨런 데이비드 가르시아

24

트리플 느낌표 ( !!!)가 그렇게 할 것입니다.


이것은 OSX 10.11.4 (El Capitan)의 해결책이었습니다. disable-pry+ ENV['DISABLE_PRY'] = nil콤보를 시도하지 않았지만 exit-programsystemExit을 제공 하려고 시도 했습니다. 이건 그냥 작동합니다. (켜짐 레일 3.2.22.2, 지레 0.10.3 및 루비 1.9.3)
SidOfc

17

사용하다

disable-pry

다시 사용하려면 컨트롤러에 추가하십시오

ENV['DISABLE_PRY'] = nil

14

binding.pry문은 정확히 GDB에 중단 점과 동일합니다. GDB에서 이러한 중단 점은 100 배나됩니다.

당신은 단지 원하는 경우 binding.pry루프의 첫 번째 반복을 위해, 한 번 공격 할 다음에 조건을 사용 binding.pry하므로 같은 :

(1..100).each do |i|
  binding.pry if i == 1
  puts i
end

그런 다음을 입력하여 현재 세션을 종료하십시오 exit.


1

위의 두 가지 이전 답변을 바탕으로 :

감사합니다! 당신의 조언은 정말 많은 도움이되었습니다!

나는 단지 DISABLE_PRY환경 변수 에 대해 항상 걱정하지 않기 위해 개인적으로 사용하는 간단한 바보 같은 트릭을 공유하고 싶습니다 . 이 콜백을 ApplicationController프로젝트 의 기본 컨트롤러 에 영구적으로 추가하십시오 . disable-pry호출 될 때마다 PRY를 자동으로 다시 활성화합니다 .

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :reenable_pry

  private

  def reenable_pry
    ENV['DISABLE_PRY'] = nil
  end
end

1

gem pry-moves을 사용하면 f(finish 명령)을 사용하여 루프에서 벗어날 수 있습니다


예:

    42: def test
    43:   3.times do |i|
 => 44:     binding.pry
    45:     puts i
    46:   end
    47:   puts :finish
    48: end

[1] pry(main)> f
0
1
2

Frame: 0/1 method
From: playground/sand.rb:47 main

    42: def test
    43:   3.times do |i|
    44:     binding.pry
    45:     puts i
    46:   end
 => 47:   puts :finish
    48: end

0

'q'를 누르면 다음과 같이 표시됩니다

[1] pry(#<AlbumsController>)>

유형

exit

이 단어는 그렇지 않은 경우 수행합니다.

control + c
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.