Re: [RFC 0/5] Implenent 'frame apply COMMAND', enhance 'thread apply COMMAND'

Simon Marchi
2018-05-18T02:14:10Z

On 2018-05-05 03:27 PM, Philippe Waroquiers wrote:
> This patch series :
> * implements a new command
> 'frame apply [all | COUNT | -COUNT] [-FLAGS...] COMMAND'.
> * enhance 'thread apply COMMAND' by adding a -FLAGS argument
> * adds some shortcuts commands
> * documents the above in gdb.texinfo and NEWS.
>
> Th new command 'frame apply' allows to apply a COMMAND to a number of frames,
> or to all frames.
> The optional -FLAGS... argument allows to control what output to produce
> and how to handle errors raised when applying COMMAND to a frame.
>
> Some examples usages for this new command:
> frame apply all info frame
> Produce info frame for all frames
> frame apply all p $sp
> For each frame, print the location, followed by the frame sp
> frame apply all -qq p $sp
> Same as before, but -qq flags (q = quiet) indicate to only print
> the frames sp.
> frame apply all -vv p $sp
> Same as before, but -vv flags (v = verbose) indicate to print
> location and source line for each frame.
> frame apply all p some_local_var_somewhere
> Print some_local_var_somewhere in all frames. 'frame apply'
> will abort as soon as the print command fails.
> frame apply all -c p some_local_var_somewhere
> Same as before, but -c flag (c = continue) means to
> print the error and continue applying command in case the
> print command fails.
> frame apply all -s p some_local_var_somewhere
> Same as before, but -s flag (s = silent) means to
> be silent for frames where the print command fails.
> In other words, this allows to 'search' the frame in which
> some_local_var_somewhere can be printed.
>
> 'thread apply' command has been enhanced to also accepts a -FLAGS...
> argument.
>
> Some examples usages for this new argument:
> thread apply all -s frame apply all -s p some_local_var_somewhere
> Prints the thread id, frame location and some_local_var_somewhere
> value in frames of threads that have such local var.
>
> To make the life of the user easier, the most typical use cases
> have shortcuts :
> faas : shortcut for 'frame apply all -s'
> taas : shortcut for 'thread apply all -s'
> tfaas : shortcut for 'thread apply all -s frame apply all -s"
>
> An example usage :
> tfaas p some_local_var_somewhere
> same as the longer:
> 'thread apply all -s frame apply all -s p some_local_var_somewhere'
>
> The patch serie provides the implementation and all user visible documentation.
>
> What is still missing is:
> * Missing regression tests.
> Not yet done as this is painful, and so is better done once there is
> an agreement on the behaviour.
>
> * Missing ChangeLog.
> Not yet done as this is painful, and is IMO close to or completely useless.
> So, I will do it for the (first) RFA, once the flow of RFC comments
> stops :).
>

Hi Philippe,

I think this is really nice. I was really amazed by "thread apply all frame apply all",
simple but powerful.

As noted in my other message, I am not sure if it's a good idea to have similar syntax
but different semantic for "thread apply" and "frame apply", it might confuse more
than anything. I'm curious to know what you think about it. Other than that, I don't
have any strong opinion on the syntax, it seems fine to me.

Simon