Add binding.pry breakpoint dynamically with pry-byebug
When debugging if you want to check at some lines where you forget to put the binding.pry, you could use some help from pry-byebug's break points feature.
You can set and adjust breakpoints directly from a Pry session using the
breakcommand:
https://github.com/deivid-rodriguez/pry-byebug#breakpoints
break SomeClass#run # Break at the start of `SomeClass#run`.
break app/models/user.rb:15 # Break at line 15 in user.rb.
...
Please bear with me with this example as a showcase.
scenario "Guest can't view draft post" do
post = create(:post, title: 'Vim', published_at: nil)
binding.pry
visit post_path(post)
expect(page).not_to have_content('Vim')
end
Suppose you put the first binding.pry there to check the creation of post, then somehow you also want to check what's going on in the controller, normally you would stop/finish the spec and drop the binding.pry to controller and rerun the spec. With pry-byebug you could set the breakpoint in the runtime: when the execution is stopped before the visit post_path(post)
[1] pry(#<RSpec::ExampleGroups::Posts>)> break PostsController#show
Breakpoint 1: PostsController#show (Enabled)
10: def show
11: end
Now the breakpoint is set, if you continue the spec then it'll stop at the posts#show action.
This is also very useful when you check some codebase you're not familiar with like gems, during the debugging you also want to check some local variables inside a block or so, with the break command now you don't need to make changes to the library and restart your rails server.