IT story

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

hot-time 2020. 5. 10. 10:28
반응형

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

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

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

[1] pry(#<AlbumsController>)>

유형

exit

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

control + c

참고 URL : https://stackoverflow.com/questions/8015531/how-do-i-step-out-of-a-loop-with-ruby-pry

반응형