From: "mame (Yusuke Endoh) via ruby-core" <ruby-core@ml.ruby-lang.org>
To: ruby-core@ml.ruby-lang.org
Cc: "mame (Yusuke Endoh)" <noreply@ruby-lang.org>
Subject: [ruby-core:120433] [Ruby master Feature#20987] Add dbg - minimal debugging helper
Date: Fri, 27 Dec 2024 19:59:03 +0000 (UTC) [thread overview]
Message-ID: <redmine.journal-111210.20241227195903.55446@ruby-lang.org> (raw)
In-Reply-To: <redmine.issue-20987.20241226234002.55446@ruby-lang.org>
Issue #20987 has been updated by mame (Yusuke Endoh).
Basically, I like this proposal.
I use `Kernel#p` and `pp` a lot when debugging.
I often include an identifier such as `p [:foo, obj]`, `p [:bar, obj]` to distinguish which `p` the output is from. If the debug output method itself prints the caller filename, this identifier might be unnecessary. (But TBH, I am not sure. The filename and line number could be insufficient for easy recognition.)
Also, I delete all calls to `p` after debugging is done, but it is sometimes difficult to find all `p` calls. If `p` would output the filename, the deletion process would be definitely easy.
I think it would be better to extend `p` instead of introducing `dbg`. Three letters are too long for every debug method call.
As for a concern, it may be troublesome for `p` to always print the filename. Just an idea, how about opt-in by an environment variable?
```
$ ruby foo.rb
"Hello world".
$ P=1 ruby foo.rb
[foo.rb:1] "Hello world"
```
----------------------------------------
Feature #20987: Add dbg - minimal debugging helper
https://bugs.ruby-lang.org/issues/20987#change-111210
* Author: pawurb (Pawel Urbanek)
* Status: Open
----------------------------------------
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--------------------------------
Screenshot 2024-12-27 at 00.00.23.png (81.5 KB)
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
next prev parent reply other threads:[~2024-12-27 19:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-26 23:40 [ruby-core:120428] " pawurb (Pawel Urbanek) via ruby-core
2024-12-27 11:50 ` [ruby-core:120430] " pawurb (Pawel Urbanek) via ruby-core
2024-12-27 19:59 ` mame (Yusuke Endoh) via ruby-core [this message]
2024-12-27 21:15 ` [ruby-core:120434] " pawurb (Pawel Urbanek) via ruby-core
2025-01-09 11:26 ` [ruby-core:120567] " mame (Yusuke Endoh) via ruby-core
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=redmine.journal-111210.20241227195903.55446@ruby-lang.org \
--to=ruby-core@ml.ruby-lang.org \
--cc=noreply@ruby-lang.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).