Feature #20987
openAdd dbg - minimal debugging helper
Description
Hi. It's my first time contributing here, so I'm sorry in advance if I've mixed something up.
I’m author of https://github.com/pawurb/dbg-rb gem. dbg
method is inspired by Rust where it's built-in into std-lib (https://doc.rust-lang.org/std/macro.dbg.html). AFAIK in Ruby there's no simple mechanism to puts debug values together with caller info without using external dependencies. What’s more frustrating is that while p nil
outputs nil
to the std, puts nil
prints a blank line, sometimes making debugging sessions confusing.
I would like to propose adding a minimal dbg
helper method to stdlib:
dbg("Hello world", [1, 2, 3])
# => [dir/file.rb:12] "Hello world"
# => [dir/file.rb:12] [1, 2, 3]
dbg
will produce verbose output together with informative file name and LOC info. I think that such built-in feature would be useful for many Ruby devs.
My gem uses external dependencies, but I've came up with this barebones implementation:
def dbg(*msgs)
loc = caller_locations.first.to_s
matching_loc = loc.match(/.+(rb)\:\d+\:(in)\s/)
src = if matching_loc.nil?
loc
else
matching_loc[0][0..-5]
end
file, line = src.split(":")
file = file.split("/").last(2).join("/")
src = "[#{file}:#{line}]"
msgs.each do |msg|
puts "#{src} #{msg.inspect}"
end
nil
end
Files