From: Stan Shebs <stanshebs@earthlink.net>
To: Tom Tromey <tromey@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] dynamic printf
Date: Tue, 13 Mar 2012 23:51:00 -0000 [thread overview]
Message-ID: <4F5FDD6B.3030507@earthlink.net> (raw)
In-Reply-To: <87ipien6me.fsf@fleche.redhat.com>
On 3/8/12 1:08 PM, Tom Tromey wrote:
>>>>>> "Stan" == Stan Shebs<stanshebs@earthlink.net> writes:
> Stan> This patch implements a "dynamic printf", which is basically a
> Stan> breakpoint with a printf;continue as its command list - but with
> Stan> additional features that make it more interesting.
>
> Very nice. I implemented something like this in Python once, but
> without the cool remote agent features.
>
> Stan> dprintf<location> <format>,<arg>,<arg>...
> Stan> where the location is as for breakpoints, while the format and args
> Stan> are as for the printf command. So you could have something like
>
> I think you have to have a comma after the location. That is the only
> reliable linespec terminator.
Hmmm. The format is a string though; would linespec parsing attempt to
proceed into that? How is "break <location> if foo" working these days?
>
> Stan> The patch itself is somewhat of a hack-n-slash through the middle of
> Stan> GDB, and there is much to critique. :-)
>
> I have a few things, but nothing really major. Some of this is outside
> areas I know much about, but I did at least skim it all and I think it
> generally looks good.
>
> Stan> +/* Parse the given expression, compile it into an agent expression
> Stan> + that does a printf, and display the resulting expression. */
> Stan> +
> Stan> +extern char *parse_format_string (char **arg);
>
> There must be a header that this could go in.
Yeah, I should make a separate patch to break out the format string parsing.
> Stan> +/* Temporary hack to smuggle remainder of command line through. */
> Stan> +char *glob_extra_string = NULL;
>
> I'd much prefer something cleaner.
> There's been a lot of work in recent times to clean up breakpoints in
> various ways -- adding methods, refactorings, etc -- and there is more
> to come. This goes against the trend.
I think the right thing is to make up a package for post-location
modifiers to break-type commands. We're up to condition, thread, task,
and now command, and maybe process and itset soon, all being passed as
separate arguments everywhere.
>
> Stan> + struct agent_expr *cmd_bytecode;
>
> Needs a comment.
> Perhaps subclassing bp_location is also doable?
I'm not sure what you mean by this?
>
> Stan> + case gdb_agent_op_printf:
> [...]
> Stan> + /* (should re-check format before calling?) */
> Stan> + printf (format,
> Stan> + args[0], args[1], args[2], args[3], args[4],
> Stan> + args[5], args[6], args[7], args[8], args[9]);
>
> Yeah, this seems overly optimistic to me.
> gdb used to have bugs where bad printf commands would crash it (IIRC
> there are some closed PRs about this).
> Maybe common-izing some code from ui_printf is the right thing? Or some
> kind of format checking. Also this leaves you at the mercy of the host
> printf for the '"%s", 0' case.
>
Yeah, literal printf is just having compounding problems. Among other
things, the args are all 64-bit values on the stack, so something like a
4-byte-getting "%d" can mess up vararg fetching bigtime. The ui_printf
code would make sense (and for the same reason), in that we are looking
at each format char so as to know how to cast the data value, but
ultimately relying on the library function to turn the value into
characters.
Stan
next prev parent reply other threads:[~2012-03-13 23:51 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-29 9:14 Stan Shebs
2012-02-29 10:28 ` Andreas Schwab
2012-03-13 23:09 ` Stan Shebs
2012-03-14 14:47 ` Marc Khouzam
2012-03-14 15:28 ` Tom Tromey
2012-02-29 16:16 ` Joel Brobecker
2012-03-13 23:15 ` Stan Shebs
2012-03-13 23:40 ` Joel Brobecker
2012-02-29 18:21 ` Eli Zaretskii
2012-03-13 23:20 ` Stan Shebs
2012-03-01 14:04 ` Hui Zhu
2012-03-04 6:31 ` Hui Zhu
2012-03-08 21:08 ` Tom Tromey
2012-03-13 23:51 ` Stan Shebs [this message]
2012-03-14 15:24 ` 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=4F5FDD6B.3030507@earthlink.net \
--to=stanshebs@earthlink.net \
--cc=gdb-patches@sourceware.org \
--cc=tromey@redhat.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