From: Philippe Waroquiers <philippe.waroquiers@skynet.be>
To: Doug Evans <dje@google.com>
Cc: gdb-patches <gdb-patches@sourceware.org>
Subject: Re: RFC: block of commands
Date: Tue, 12 Jan 2016 20:52:00 -0000 [thread overview]
Message-ID: <1452632099.1672.52.camel@skynet.be> (raw)
In-Reply-To: <047d7b3a97bc7626e3052915c9f0@google.com>
On Mon, 2016-01-11 at 21:40 +0000, Doug Evans wrote:
> Heya.
>
> One feature I've always wanted gdb's cli to have is the
> ability to catch errors and be able to continue.
> There's always a tension of whether to add things to the cli
> or just say "do it in python". gdb scripts are still useful
> and thus sometimes I think it's ok to extend the cli, such
> as in this case.
> Thus instead of /c in this patch I'd prefer something
> along the lines of "try ... end".
> ["end" is gdb's canonical "trailing }", and I'm all for
> Consistency Is Good here.]
> The actual details and semantics of "try" I would
> leave to a separate thread. For one, I'd have to think
> about it some more :-), but I would support someone
> wanting to go down that path.
>
> OTOH, trying to extend the cli's syntax with { and ; is not
> something I can support, at least not without more discussion.
> This example:
>
> thread apply all { set $prevsp = $sp; bt \{ p $ebp - $prevsp\; set
> $prevsp = $sp \} }
> => print the size of each frame
>
> suggests things could be better; having to escape braces within
> subcommands feels excessively error prone.
> gdb has one line per command, and changing that
> may make things too unwieldly.
The { (and have the terminating } optional) was chosen in order
to make the interactive typing of a block of command faster/easier.
I agree that this new syntax is very different of the
'usual gdb multi-lines terminated by end'.
However, multi-lines with end means the user cannot simply type e.g.
thread apply all { p i; p j}
Instead, the user must type:
define pij
p i
p j
end
thread apply all pij
And after, if the user wants to also print k,
then the pij sequence must be retyped (I do not know a way
to change/edit/complete a user defined command).
An alternative might be to make the terminating } mandatory.
Then I think we could get rid of the { and } escaping
So, the question is how much we want to make the block of commands
easy to use interactively ?
Maybe it is not that unusual to have 2 concepts
of 'list of commands' :
one command per line, with some 'begin/end' keywords
several commands per lines, separated by ;
(i.e. similar to what a shell is providing with if/fi and ;).
The ; separated list versus multi-lines is clearly the main
point of discussion.
Note that if ever the {}; idea survives, we have to take care
about parsing of existing scripts that would do e.g.
echo { is an open bracket
Not too sure it will be easy to make the {}; idea fully backward
compatible :(
> There are still
> macros so one could still do "thread apply all print-frame-size",
> and put the guts of frame size computation in a macro named
> print-frame-size.
True, but that makes the interactive use and editing
not so easy (cfr above).
>
> Also, I'd prefer to have generally composable commands
> over extending individual commands.
> E.g., one common thing to do with "thread apply" is backtrace,
> as in "thread apply all bt". I like that much better than
> if we had extended backtrace to work on each thread.
>
> Following "Consistency Is Good", and given that we have
> "thread apply", for your "bt {/c p i" case how about
> something like:
>
> frame apply all foo
Yes, that looks better than adding an optional command to
backtrace.
Philippe
next prev parent reply other threads:[~2016-01-12 20:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-11 21:40 Doug Evans
2016-01-12 20:52 ` Philippe Waroquiers [this message]
-- strict thread matches above, loose matches on Subject: below --
2016-01-21 1:29 Doug Evans
2016-01-22 21:47 ` Philippe Waroquiers
2016-01-24 20:03 ` Doug Evans
2016-01-24 22:23 ` Philippe Waroquiers
2015-11-21 18:41 Philippe Waroquiers
2015-12-03 22:28 ` Philippe Waroquiers
2015-12-21 13:35 ` Philippe Waroquiers
2016-01-04 19:28 ` Philippe Waroquiers
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=1452632099.1672.52.camel@skynet.be \
--to=philippe.waroquiers@skynet.be \
--cc=dje@google.com \
--cc=gdb-patches@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