[ruby-on-rails] Ruby Pry로 루프에서 나가려면 어떻게해야합니까?

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

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

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

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



답변

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

exit-program

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

!!!


답변

나는 사용한다:

disable-pry

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


답변

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

exit!

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


답변

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


답변

사용하다

disable-pry

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

ENV['DISABLE_PRY'] = nil


답변

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

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

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

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


답변

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

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

나는 단지 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