ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: "pawurb (Pawel Urbanek) via ruby-core" <ruby-core@ml.ruby-lang.org>
To: ruby-core@ml.ruby-lang.org
Cc: "pawurb (Pawel Urbanek)" <noreply@ruby-lang.org>
Subject: [ruby-core:120434] [Ruby master Feature#20987] Add dbg - minimal debugging helper
Date: Fri, 27 Dec 2024 21:15:29 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-111211.20241227211525.55446@ruby-lang.org> (raw)
In-Reply-To: <redmine.issue-20987.20241226234002.55446@ruby-lang.org>

Issue #20987 has been updated by pawurb (Pawel Urbanek).


Thanks for feedback!

One thing I'm worried about with `P=1` approach, are Ruby programs that rely on the current `p` output, making it impossible to opt-in this new feature. Maybe we could go for `d` instead of `dbg`?

As for identifiers, [dbg-rb gem](https://github.com/pawurb/dbg-rb) currently supports passing local variables via symbols like this:

```ruby

a = 1
b = 2 

dbg(:a, :b)
# [models/user.rb:22] a = 1
# [models/user.rb:22] b = 2

```

This feature requires [binding_of_caller](https://github.com/banister/binding_of_caller) gem, but if it was found useful enough, maybe it could be possible to reimplement it without external deps? Optional identifiers together with file name and LOC info would make Ruby debugging much simpler. 

----------------------------------------
Feature #20987: Add dbg - minimal debugging helper
https://bugs.ruby-lang.org/issues/20987#change-111211

* 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/

  parent reply	other threads:[~2024-12-27 21:16 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 ` [ruby-core:120433] " mame (Yusuke Endoh) via ruby-core
2024-12-27 21:15 ` pawurb (Pawel Urbanek) via ruby-core [this message]
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-111211.20241227211525.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).