Byebug is a helpful and easy-to-use debugger made for Ruby. It allows developers to use traditional debugging features to help identify what is happening in a program while it's running. Byebug was created by David Rodriguez in hopes of building a better Ruby debugger.
The core features of Byebug include stepping through a program, setting breakpoints to pause a program, basic REPL functionality, and variable tracking.
Starting Byebug
There are several ways to start a debugging session with Byebug. If you want to start the debugger from the first line of code, you can run your file from the command line and add the "byebug" prefix: $ byebug /path/to/ruby_file.rb
. Alternatively, adding the keyword byebug
to the source code will trigger a breakpoint and start a byebug session on execution:
def printer(n)
# breakpoint will trigger here
byebug
n.times do |i|
puts "This is round #{i}"
end
puts "hello"
puts "world"
end
printer(10)
Stopping Byebug
Getting out of a byebug session is just as easy as getting into one. You can terminate a byebug session at any time by using the quit
or q
command. However, developers should be mindful that code following the current breakpoint will not execute once the byebug session is terminated using quit
.
Navigating a Byebug Session
help
It's always great to have quick access to info on what commands you can run while in a byebug session. The help
command will return a list of useable commands. help <command-name>
will return information specific to that command.
continue
The continue
command allows the program to continue running after hitting a breakpoint. The program will continue to run until finishing or hitting another breakpoint. Additionally, when an integer is passed as an argument (e.g., continue 5
), the program will execute the number of lines passed as an argument before initiating another breakpoint. Alternatively, the continue!
variation will run the program and ignore any future breakpoints.
next
The next
command will execute the next line of code and only the next line of code. However, the next
command will step over method calls. It will also accept an integer as an argument and will execute the number of lines passed as the argument.
step
step
is similar to next
with the key difference being that step
will step into (and execute) method calls. Since byebug remembers the last command you entered, simply hitting return
/enter
will continue running the program one line at a time with each press. Combining this feature with byebug's REPL functionality allows developers to access information about a program's state throughout each step of the program's execution.
In this example, entering next
would cause byebug to skip the loop and jump to line 8. Entering step
will cause the first line of the loop to run. Subsequent step
commands will continue executing the loop. While inside the loop, we can access the value of i
at any time using byebug's REPL functionality.
restart
As the name implies, restart
will terminate and restart the program in byebug. This could save a few steps as you go through rounds of debugging.
irb
It was a surprise to find that you can enter an IRB or VIM session during a byebug session. Simple type irb
to initiate the session. When you exit IRB, you'll be right where you left off in the byebug session.
These commands only begin to scratch the surface of what you can do with byebug. I'd recommend the following resources if you want to take a deeper dive on how to use this fantastic Ruby debugging tool.
Top comments (0)