2009-07-17 29 views

Trả lời

27

bạn có thể sử dụng ruby-debug để có được quyền truy cập vào IRB

require 'rubygems' 
require 'ruby-debug' 
x = 23 
puts "welcome" 
debugger 
puts "end" 

khi chương trình đạt debugger bạn sẽ nhận được quyền truy cập vào IRB.

+0

Điều này có đưa bối cảnh ràng buộc vào tài khoản không? Tôi có thể đặt sự ràng buộc với cái gì khác không? –

+0

Duh. Tôi là một thằng ngốc. Cảm ơn! –

+2

Điều này yêu cầu đá quý 'ruby-debug', không hoạt động với Ruby 1.9. – Zr40

14

có vẻ như nó yêu cầu một đoạn mã để thả vào irb.

Đây là liên kết (dường như hoạt động tốt).

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 
+2

Tìm thấy tuyệt vời, cảm ơn! Đây chính xác là những gì tôi cần để truy cập vào các biến lớp và các cá thể trong bối cảnh mà tôi đã gọi IRB.start_session (binding). – csmosx

44

Pry (một sự thay thế IRB) cũng cho phép bạn làm điều này, trên thực tế nó được thiết kế từ mặt đất lên cho chính xác trường hợp sử dụng này :)

Đó là dễ dàng như đặt binding.pry tại thời điểm bạn muốn bắt đầu phiên:

require 'pry' 
x = 10 
binding.pry 

Và bên trong phiên:

pry(main)> puts x 
=> 10 

Kiểm tra các website: http://pry.github.com

Pry cho phép của bạn:

  • thả vào một phiên tại bất kỳ điểm nào trong mã của bạn
  • xem mã nguồn phương pháp
  • xem phương pháp tài liệu (không sử dụng RI để bạn không phải tạo trước nó)
  • bật và tắt ngữ cảnh khác s
  • nổi bật cú pháp
  • hội nhập ý chính
  • xem và phát lại lịch sử
  • biên tập mở để chỉnh sửa các phương pháp sử dụng edit obj.my_method cú pháp

tính năng Một tấn lớn hơn và độc đáo

+3

Chà, những tảng đá đó. – Jeff

+1

Cảm ơn rất nhiều, điều này nên ở trên cùng, tôi đang trên đường sử dụng IRB cho điều đó – Dorian

0

Chỉ cần thêm dòng này đến nơi bạn muốn điểm ngắt:

require 'ruby-debug';debugger

nhưng tôi đề nghị sử dụng nâng lên thay vì IRB, đó là siêu tiện dụng, chèn dòng sau thay vì:

require 'pry'; binding.pry

7

Tính năng này có sẵn từ Ruby 2.4. Bạn chỉ có thể sử dụng binding.irb

Ví dụ:

require 'irb' 
a = 10 
binding.irb 
puts a 

Nếu bạn chạy trên mã, bạn sẽ có bảng điều khiển irb để bạn có thể kiểm tra giá trị của biến cục bộ và bất kỳ thứ gì khác nằm trong phạm vi.

Nguồn: http://blog.redpanthers.co/new-binding-irb-introduced-ruby-2-4/

của Ruby cam kết: https://github.com/ruby/ruby/commit/493e48897421d176a8faf0f0820323d79ecdf94a

0

Tôi khá muộn để các trò chơi nhưng nếu bạn đang tải một kịch bản từ bên trong IRB/cạy đã có, đơn giản raise cũng làm việc để bật bạn trở lại dấu nhắc irb/pry. Tôi sử dụng điều này khá thường xuyên khi viết một kịch bản tắt trong bảng điều khiển đường ray.

Các vấn đề liên quan