Git Product home page Git Product logo

pry-debugger's Introduction

pry-debugger Bitdeli Badge

Fast execution control in Pry

Adds step, next, finish, and continue commands and breakpoints to Pry using debugger.

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.

Execution Commands

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.

Breakpoints

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.

Examples:

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.

Type break --help from a Pry session to see all available options.

breakpoints: List all defined breakpoints. Pass -v or --verbose to see the source code around each breakpoint.

Caveats

pry-debugger is not yet thread-safe, so only use in single-threaded environments.

Only supports MRI 1.9.2 and 1.9.3. For a pure ruby approach not reliant on debugger, check out pry-nav. Note: pry-nav and pry-debugger cannot be loaded together.

Remote debugging

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'

Then add 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.

Tips

Stepping through code often? Add the following shortcuts to ~/.pryrc:

if defined?(PryDebugger)
  Pry.commands.alias_command 'c', 'continue'
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
end

Contributors

  • Gopal Patel (@nixme)
  • John Mair (@banister)
  • Nicolas Viennot (@nviennot)
  • Benjamin R. Haskell (@benizi)
  • Joshua Hou (@jshou)
  • ...and others who helped with pry-nav

Patches and bug reports are welcome. Just send a pull request or file an issue. Project changelog.

pry-debugger's People

Contributors

nixme avatar banister avatar arnab avatar janiskesteris avatar nviennot avatar jshou avatar rking avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.