문제
실행중인 루비 스크립트에서 IRB 프롬프트에 삭제할 수 있습니까?
스크립트를 실행하고 싶지만 프로그램의 현재 상태가있는 프로그램의 한 지점에서 RDEBUG를 실행하고 중단 점을 갖는 것이 아니라 IRB 프롬프트를 제공하게하십시오.
해결책
Ruby-Debug를 사용하여 IRB에 액세스 할 수 있습니다
require 'rubygems'
require 'ruby-debug'
x = 23
puts "welcome"
debugger
puts "end"
프로그램이 디버거에 도달하면 IRB에 액세스 할 수 있습니다.
다른 팁
캐내다 (IRB 대안) 도이 작업을 수행 할 수 있습니다. 실제로이 유스 케이스를 위해 처음부터 설계되었습니다 :)
퍼팅만큼 쉽습니다 binding.pry
시점에서 세션을 시작하려는 시점에서 :
require 'pry'
x = 10
binding.pry
그리고 세션 내에서 :
pry(main)> puts x
=> 10
웹 사이트를 확인하십시오. http://pry.github.com
Pry let 's You :
- 코드의 어느 시점에서든 세션에 중단
- 방법 소스 코드를 봅니다
- 메소드 문서보기 (RI를 사용하지 않으므로 사전 생성 할 필요가 없습니다)
- 다른 맥락에서 튀어 나오고 나갑니다
- 구문 강조 표시
- GIST 통합
- 역사를보고 재생합니다
- 편집자를 열어서 사용 방법을 편집 할 수 있습니다
edit obj.my_method
통사론
더 훌륭하고 독창적 인 기능
분명히 IRB에 삭제하려면 코드 덩어리가 필요합니다.
다음은 링크입니다 (잘 작동하는 것 같습니다).
http://jameskilton.com/2009/04/02/embedding-irb-into-your-ruby-application
require 'irb'
module IRB
def self.start_session(binding) # call this method to drop into irb
unless @__initialized
args = ARGV
ARGV.replace(ARGV.dup)
IRB.setup(nil)
ARGV.replace(args)
@__initialized = true
end
workspace = WorkSpace.new(binding)
irb = Irb.new(workspace)
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
@CONF[:MAIN_CONTEXT] = irb.context
catch(:IRB_EXIT) do
irb.eval_input
end
end
end
이 기능은 Ruby 2.4에서 제공됩니다. 당신은 그냥 사용할 수 있습니다 binding.irb
예를 들어
require 'irb'
a = 10
binding.irb
puts a
코드를 위에서 실행하는 경우 IRB 콘솔을 얻으므로 로컬 변수 및 범위에있는 다른 내용을 검사 할 수 있습니다.
원천: http://blog.redpanthers.co/new-binding-irb-intructed-ruby-2-4/
루비 커밋 : https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a
중단 점을 원하는 위치 에이 줄을 추가하십시오.
require 'ruby-debug';debugger
그러나 매우 편리한 IRB 대신 Pry를 사용하는 것이 좋습니다. 대신 다음 줄을 삽입하십시오.
require 'pry'; binding.pry
나는 게임에 꽤 늦었지만 이미 IRB/Pry 내에서 스크립트를로드하고 있다면 간단합니다. raise
또한 IRB/Pry 프롬프트로 다시 튀어 나오기 위해 노력합니다. 나는 Rails 콘솔에 하나의 오프 스크립트를 쓸 때 이것을 자주 사용합니다.