From: Tom Tromey <tromey@redhat.com>
To: Stan Shebs <stanshebs@earthlink.net>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] dynamic printf
Date: Thu, 08 Mar 2012 21:08:00 -0000 [thread overview]
Message-ID: <87ipien6me.fsf@fleche.redhat.com> (raw)
In-Reply-To: <4F4DCDD5.2040807@earthlink.net> (Stan Shebs's message of "Tue, 28 Feb 2012 23:03:49 -0800")
>>>>> "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.
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.
Stan> +#if 0
:)
Stan> +char *
Stan> +parse_format_string (char **arg)
Need intro comment.
This looks like bits were copied from printcmd.c:ui_printf.
Could the code be shared instead?
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.
Stan> + struct agent_expr *cmd_bytecode;
Needs a comment.
Perhaps subclassing bp_location is also doable?
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.
Tom
next prev parent reply other threads:[~2012-03-08 21:08 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 [this message]
2012-03-13 23:51 ` Stan Shebs
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=87ipien6me.fsf@fleche.redhat.com \
--to=tromey@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=stanshebs@earthlink.net \
/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