From: Stan Shebs <stan@codesourcery.com>
To: "gdb@sourceware.org" <gdb@sourceware.org>
Subject: [RFC] Collecting strings at tracepoints
Date: Fri, 04 Jun 2010 22:53:00 -0000 [thread overview]
Message-ID: <4C0983C3.6000604@codesourcery.com> (raw)
Collection of strings is a problem for tracepoint users, because the
literal interpretation of "collect str", where str is a char *, is to
collect the address of the string, but not any of its contents. It is
possible to use the '@' syntax to get some contents, for instance
"collect str@40" acquires the first 40 characters, but it is a poor
approximation; if the string is shorter than that, you collect more than
necessary, and possibly run into access trouble if str+40 is outside the
program's address space, or else the string is longer, in which case you
may miss the part you really wanted.
For normal printing of strings GDB has a couple tricks it does. First,
it explicitly recognizes types that are pointers to chars, and
automatically dereferences and prints the bytes it finds. Second, the
print elements limit prevents excessive output in case the string is long.
For tracepoint collection, I think the automatic heuristic is probably
not a good idea. In interactive use, if you print too much string, or
just wanted to see the address, there's no harm in displaying extra
data. But for tracing, the user needs a little more control, so that
the buffer doesn't inadvertantly fill up too soon. So I think that
means that we should have the user explicitly request collection of
string contents.
Looking at how '@' syntax works, we can extend it without disrupting
expression parsing much. For instance, "str@@" could mean to deference
str, and collect bytes until a 0 is seen, or the print elements limit is
reached (implication is that we would have to tell the target that
number). The user could exercise even finer control by supplying the
limit explicitly, for instance "str@/80" to collect at most 80 chars of
the string. ("str@@80" seems like it would cause ambiguity problems vs
"str@@").
This extended syntax could work for the print command too, in lieu of
tweaking the print element limit, and for types that GDB does not
recognize as a string type.
Under the hood, it's not yet clear if we will need additional bytecodes,
but probably so.
Stan
next reply other threads:[~2010-06-04 22:53 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-04 22:53 Stan Shebs [this message]
2010-06-04 23:00 ` Michael Snyder
2010-06-08 21:19 ` Tom Tromey
2010-06-15 22:51 ` Doug Evans
2010-06-16 0:09 ` Stan Shebs
2010-06-16 18:00 ` Doug Evans
2010-06-16 18:18 ` Stan Shebs
2010-06-16 18:27 ` Tom Tromey
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=4C0983C3.6000604@codesourcery.com \
--to=stan@codesourcery.com \
--cc=gdb@sourceware.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