From: Michael Snyder <msnyder@vmware.com>
To: Stan Shebs <stan@codesourcery.com>
Cc: "gdb@sourceware.org" <gdb@sourceware.org>
Subject: Re: [RFC] Collecting strings at tracepoints
Date: Fri, 04 Jun 2010 23:00:00 -0000 [thread overview]
Message-ID: <4C098570.7040108@vmware.com> (raw)
In-Reply-To: <4C0983C3.6000604@codesourcery.com>
Stan Shebs wrote:
> 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.
Another possibility might be as an option to the "collect" command,
eg.
> collect /s foo (collect foo as a string).
Does seem like an additional byte code would be needed.
next prev parent reply other threads:[~2010-06-04 23:00 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-04 22:53 Stan Shebs
2010-06-04 23:00 ` Michael Snyder [this message]
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=4C098570.7040108@vmware.com \
--to=msnyder@vmware.com \
--cc=gdb@sourceware.org \
--cc=stan@codesourcery.com \
/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