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

Message ID 20180505192804.12731-1-philippe.waroquiers@skynet.be
Headers show
Series
  • Implenent 'frame apply COMMAND', enhance 'thread apply COMMAND'
Related show

Message

Philippe Waroquiers May 5, 2018, 7:27 p.m.
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 :).

Comments

Simon Marchi May 18, 2018, 2:14 a.m. | #1
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
Philippe Waroquiers May 18, 2018, 9:29 p.m. | #2
On Thu, 2018-05-17 at 22:14 -0400, Simon Marchi wrote:
> 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

Hello Simon,

There are a few comments to which I will reply specifically
in the various mails.
The other non discussed comments are all clear to me, and
I should be able to handle them for the next version.

Thanks for the review.

Philippe