I\'m using Pry with my Rails application. I set binding.pry
inside a loop in my model to try and debug a problem. For example:
(1..100).each do
Use
disable-pry
To renable, add this to your controller
ENV['DISABLE_PRY'] = nil
press 'q' and you will see just like this
[1] pry(#<AlbumsController>)>
type
exit
this one word will do, if not:
control + c
A binding.pry
statement is exactly the same as a breakpoint in GDB. Such a breakpoint in GDB would be hit 100 times too.
If you only want the binding.pry
to be hit once, for the first iteration of the loop, then use a conditional on the binding.pry
like so:
(1..100).each do |i|
binding.pry if i == 1
puts i
end
You then exit the current session by just typing exit
.
I use:
disable-pry
This will keep the program running, but will keep it from continuing to stop execution. This is especially helpful when you are debugging in the console.
Using gem pry-moves
you can step out of loop using f
(finish command)
example:
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
Based on the two previous answers above:
Thank you guys! Your advices have helped me really a lot!
I just want to share a simple stupid trick, that I personally use to don't worry about the DISABLE_PRY
environment variable all the time. Add this callback to the base controller ApplicationController
of your project permanently. It would automatically re-enable PRY every time the disable-pry
is called:
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :reenable_pry
private
def reenable_pry
ENV['DISABLE_PRY'] = nil
end
end