Class: Binding
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/irb.rb |
Instance Method Summary
-
#irb(show_code: true)
Opens an
::IRB
session wherebinding.irb
is called which allows for interactive debugging.
Instance Method Details
#irb(show_code: true)
Opens an ::IRB
session where binding.irb
is called which allows for interactive debugging. You can call any methods or variables available in the current scope, and mutate state if you need to.
Given a Ruby file called potato.rb
containing the following code:
class Potato
def initialize
@cooked = false
binding.irb
puts "Cooked potato: #{@cooked}"
end
end
Potato.new
Running ruby potato.rb
will open an ::IRB
session where binding.irb
is called, and you will see the following:
$ ruby potato.rb
From: potato.rb @ line 4 :
1: class Potato
2: def initialize
3: @cooked = false
#=> 4: binding.irb
5: puts "Cooked potato: #{@cooked}"
6: end
7: end
8:
9: Potato.new
irb(#<Potato:0x00007feea1916670>):001:0>
You can type any valid Ruby code and it will be evaluated in the current context. This allows you to debug without having to run your code repeatedly:
irb(#<Potato:0x00007feea1916670>):001:0> @cooked
#=> false
irb(#<Potato:0x00007feea1916670>):002:0> self.class
#=> Potato
irb(#<Potato:0x00007feea1916670>):003:0> caller.first
#=> ".../2.5.1/lib/ruby/2.5.0/irb/workspace.rb:85:in `eval'"
irb(#<Potato:0x00007feea1916670>):004:0> @cooked = true
#=> true
You can exit the ::IRB
session with the exit
command. Note that exiting will resume execution where binding.irb
had paused it, as you can see from the output printed to standard output in this example:
irb(#<Potato:0x00007feea1916670>):005:0> exit
Cooked potato: true
See IRB@IRB+Usage for more information.
# File 'lib/irb.rb', line 980
def irb(show_code: true) IRB.setup(source_location[0], argv: []) workspace = IRB::WorkSpace.new(self) STDOUT.print(workspace.code_around_binding) if show_code binding_irb = IRB::Irb.new(workspace) binding_irb.context.irb_path = File. (source_location[0]) binding_irb.run(IRB.conf) binding_irb.debug_break end