Fast execution control in Pry
To use, invoke pry normally. No need to start your script or app differently.
def some_method binding.pry # Execution will stop here. puts 'Hello World' # Run 'step' or 'next' in the console to move here. end
For a complete debugging environment, add pry-stack_explorer for call-stack frame navigation.
step: Step execution into the next line or method. Takes an optional numeric argument to step multiple times.
next: Step over to the next line within the same frame. Also takes an optional numeric argument to step multiple lines.
finish: Execute until current stack frame returns.
continue: Continue program execution and end the Pry session.
You can set and adjust breakpoints directly from a Pry session using the following commands:
break: Set a new breakpoint from a line number in the current file, a file and line number, or a method. Pass an optional expression to create a conditional breakpoint. Edit existing breakpoints via various flags.
break SomeClass#run Break at the start of `SomeClass#run`. break Foo#bar if baz? Break at `Foo#bar` only if `baz?`. break app/models/user.rb:15 Break at line 15 in user.rb. break 14 Break at line 14 in the current file. break --condition 4 x > 2 Change condition on breakpoint #4 to 'x > 2'. break --condition 3 Remove the condition on breakpoint #3. break --delete 5 Delete breakpoint #5. break --disable-all Disable all breakpoints. break List all breakpoints. (Same as `breakpoints`) break --show 2 Show details about breakpoint #2.
break --help from a Pry session to see all available options.
breakpoints: List all defined breakpoints. Pass
--verbose to see
the source code around each breakpoint.
pry-debugger is not yet thread-safe, so only use in single-threaded environments.
Support for pry-remote (>= 0.1.4) is also included. Requires explicity requiring pry-debugger, not just relying on pry's plugin loader.
Want to debug a Rails app running inside foreman? Add to your Gemfile:
gem 'pry' gem 'pry-remote' gem 'pry-stack_explorer' gem 'pry-debugger'
binding.remote_pry where you want to pause:
class UsersController < ApplicationController def index binding.remote_pry ... end end
Load a page that triggers the code. Connect to the session:
$ bundle exec pry-remote
Using Pry with Rails? Check out Jazz Hands.
Stepping through code often? Add the following shortcuts to
if defined?() .commands.alias_command 'c', 'continue' .commands.alias_command 's', 'step' .commands.alias_command 'n', 'next' .commands.alias_command 'f', 'finish' end
- Gopal Patel (@nixme)
- John Mair (@banister)
- Nicolas Viennot (@nviennot)
- Benjamin R. Haskell (@benizi)
- Joshua Hou (@jshou)
- ...and others who helped with pry-nav