In byebug we can move to next line by typing 'n', similarly is there anyway to move to the next line in 'pry' ?
I have gone through there documentation but nothing's works out.
Check out pry-nav, it gives you methods like next and step, which should be what you're looking for.
If you're in regular old Pry you can use exit to go to the next binding.pry or disable-pry to exit Pry entirely.
You can't. pry doesn't have any command who let you jump to the next line. So, your alternatives are:
Adding a new pry.binding on the next breakpoint and then using exit to jump between bingings.
Using a gem like pry-byebug or pry-nav who adds the next command to jump to the next line.
Using a gem like pry-byebug or pry-debugger who adds the break command to add breakpoints like break <Class#method>.
Installing pry-byebug is the best solution for your case, you can't achieve this with just pry.
you can exit to continue the code flow
Related
I'm wondering if it's possible to start a Byebug session giving a starting point from a Rails console. I know I can insert a byebug statement wherever I want and start debugging, but I'd like to do something like this:
Byebug.start do
# entry point
User.find(12).problematic_method
end
Thanks.
I opened the class and override the problematic_method inside the Rails console and added the byebug statement where I wanted it. This way I don't have to change the running production code (I forgot to mention above I want to debug in production).
This workaround will be enough for my purposes. The only problem is that you don't have the debug code listing available for that method, but its fine.
That is not possible. What you can do, is write your code inside a .rb file and debug that file/script using byebug.
I have some code (a Rails app) that generates output to console.
I'd like to use byebug to get the location of whatever is generating that output.
Is there a way to do that?
Could you specify a little more? What do you mean by having "the location of whatever is generating that output"? Do you mean the trace? If yes, buybug has a backtrace (you can use where also) command. Have you look into this?
EDIT:
You could use pry with byebug (with the pry-byebug) and accomplish what you want.
Use pry gem for debugging code
Gemfile
gem 'pry'
add binding.pry anywhere to debug code
I am using inline byebug to stop the program execution and debug, from rails console or from a running rails server.
I have to debug a very repetitive loop, and I need to put a byebug in the middle of that loop.
After debugging, it seems my options are either to keep pressing c until I can get out of my loop, or abort the console execution execution with exit or something similar. But then I need to reload the whole environment.
Is it possible to just tell byebug to skip next byebug lines until the request (rails server) or until the command (rails console) finishes ?
I do this a couple ways:
1.
large_array.each.with_index do |item, index|
byebug if index == 0 # or any other condition, e.g. item.some_method?
# ...
end
byebug before the loop, set a breakpoint using b <line_number>. You can clear the breakpoint later at one of the prompts.
When I set a breakpoint with Byebug in Rails, I sometimes want it to finish executing, but the guide on github says to use exit which also exits Pry. Typing continue repeatedly can be annoying if the breakpoint is in a loop.
Is there anyway to stop byebug without exiting the Rails console?
When running byebug under the Rails console or in Rails' server I usually quit only byebug by hitting Ctrl+D.
The catch with this approach is, if you do this in Rails' server then Byebug will not stop and debug the next time it hits a byebug statement in your code anywhere. But it works perfectly in the Rails console.
Try !!!. It works on pry gem, but not sure if it does on byebug.
Well this isn't the most elegant solution but it works for me so far.
If you have a base controller in your rails application you can add an accessor to hold a variable saying whether you want debugging to happen or not:
attr_accessor :debugging
Then add/modify initializer to set the variable to true on each request (or each time there is an instance created for that object):
def initialize
#debugging=true
super
end
And finally, always use the byebug call with a conditional wherever you want this behavior:
byebug if debugging
Then when you are at the IRB console and you want to exit the debugger but continue executing the code you just set the variable:
#debugging=false; finish
You could even encapsulate this in a helper or do some OOP magic but this is a good starting point. Nice thing is that if you repeat the request you'll get the standard behavior again unless you set the variable to false again.
If you want to exit a loop try skip.
It'll runs until the next breakpoint as long as it is different from the current one.
Then, once you are out of the loop you can continue.
Typing finish in the console exits byebug, without closing pry/rails console/rails server.
Ctrl + D also works.
Go to your code and remove byebug and save, then in the buybug terminal write continue then press enter.
Tadaaa your app will continue and you will exit byebug all without closing your app.
Try continue or finish
Source: https://edgeguides.rubyonrails.org/debugging_rails_applications.html#resuming-execution
Remove "debugger from your code and type in "finish" in console
(byebug) quit
Really quit? (y/n) y
user ~
The only one that works quickly and without issues for me so far.
How do I debug the rails gems? I've just found the beauty of ruby-debug and am real excited, but I want to step through the routing code in action_controller, but the debugger isn't set up at this time, it seems like it's just skipping over my "debugger" calls in action_controller/routing/route_set.rb for example.
What am I missing?
I just tested this with Rails 2.3.4. I added a 'debugger' line to the call method in vendor/rails/actionpack/lib/action_controller/routing/route_set.rb, ran 'rdebug script/server', browsed to a page, and it stopped at the correct line.
You can also use a class/method breakpoint; you'll need to step through the first few lines of the app until you're past the require 'action_controller' line, and then enter: b ActionController::Routing::RouteSet.call.
Or you can try setting a breakpoint based on the file name and line number.