Don't prune program spaces when doing "maintenance info program-spaces"
Commit Message
While debugging a program spaces issue, I found that "maintenance info
program-spaces" pruned the program spaces prior to printing them. I
don't think a command to inspect the state of the program (especially
a maintenance one) should modify the state. All it can do is potentially
hide bugs.
gdb/Changelog:
* progspace.c (print_program_space): Add "prune" parameter.
(maintenance_info_program_spaces_command): Update call to
print_program_space with new parameter.
---
gdb/progspace.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
Comments
On Wednesday, September 24 2014, Simon Marchi wrote:
> While debugging a program spaces issue, I found that "maintenance info
> program-spaces" pruned the program spaces prior to printing them. I
> don't think a command to inspect the state of the program (especially
> a maintenance one) should modify the state. All it can do is potentially
> hide bugs.
Hi Simon,
Thanks for the patch. I agree with your rationale, and just have one
comment.
> ---
> gdb/progspace.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/gdb/progspace.c b/gdb/progspace.c
> index a74b6ab..aef2d4e 100644
> --- a/gdb/progspace.c
> +++ b/gdb/progspace.c
> @@ -272,18 +272,19 @@ prune_program_spaces (void)
>
> /* Prints the list of program spaces and their details on UIOUT. If
> REQUESTED is not -1, it's the ID of the pspace that should be
> - printed. Otherwise, all spaces are printed. */
> + printed. Otherwise, all spaces are printed. If PRUNE is true,
> + prune the unused program spaces prior to printing them, so they
> + won't be displayed. */
>
> static void
> -print_program_space (struct ui_out *uiout, int requested)
> +print_program_space (struct ui_out *uiout, int requested, int prune)
> {
> struct program_space *pspace;
> int count = 0;
> struct cleanup *old_chain;
>
> - /* Might as well prune away unneeded ones, so the user doesn't even
> - seem them. */
> - prune_program_spaces ();
> + if (prune)
> + prune_program_spaces ();
>
> /* Compute number of pspaces we will print. */
> ALL_PSPACES (pspace)
> @@ -385,7 +386,7 @@ maintenance_info_program_spaces_command (char *args, int from_tty)
> error (_("program space ID %d not known."), requested);
> }
>
> - print_program_space (current_uiout, requested);
> + print_program_space (current_uiout, requested, 0 /* prune */);
Just like we had a comment explaining why we were pruning progspaces, I
think a small comment here explaining why we are *not* pruning them
would be neat.
Otherwise, looks good to me (this is not an approval).
Thanks,
On 2014-09-24 02:53 PM, Sergio Durigan Junior wrote:
>> @@ -385,7 +386,7 @@ maintenance_info_program_spaces_command (char *args, int from_tty)
>> error (_("program space ID %d not known."), requested);
>> }
>>
>> - print_program_space (current_uiout, requested);
>> + print_program_space (current_uiout, requested, 0 /* prune */);
>
> Just like we had a comment explaining why we were pruning progspaces, I
> think a small comment here explaining why we are *not* pruning them
> would be neat.
Sure, I could add to the current patch, above the call to print_program_space:
/* Since this is an "info" command, we want to avoid modifying
the state of the debugger. Therefore, don't prune unused
program spaces. */
On Wednesday, September 24 2014, Simon Marchi wrote:
> Sure, I could add to the current patch, above the call to print_program_space:
>
> /* Since this is an "info" command, we want to avoid modifying
> the state of the debugger. Therefore, don't prune unused
> program spaces. */
Nice, thanks Simon.
On Wed, Sep 24, 2014 at 11:11 AM, Simon Marchi
<simon.marchi@ericsson.com> wrote:
> While debugging a program spaces issue, I found that "maintenance info
> program-spaces" pruned the program spaces prior to printing them. I
> don't think a command to inspect the state of the program (especially
> a maintenance one) should modify the state. All it can do is potentially
> hide bugs.
>
> gdb/Changelog:
>
> * progspace.c (print_program_space): Add "prune" parameter.
> (maintenance_info_program_spaces_command): Update call to
> print_program_space with new parameter.
> ---
> gdb/progspace.c | 13 +++++++------
> 1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/gdb/progspace.c b/gdb/progspace.c
> index a74b6ab..aef2d4e 100644
> --- a/gdb/progspace.c
> +++ b/gdb/progspace.c
> @@ -272,18 +272,19 @@ prune_program_spaces (void)
>
> /* Prints the list of program spaces and their details on UIOUT. If
> REQUESTED is not -1, it's the ID of the pspace that should be
> - printed. Otherwise, all spaces are printed. */
> + printed. Otherwise, all spaces are printed. If PRUNE is true,
> + prune the unused program spaces prior to printing them, so they
> + won't be displayed. */
>
> static void
> -print_program_space (struct ui_out *uiout, int requested)
> +print_program_space (struct ui_out *uiout, int requested, int prune)
> {
> struct program_space *pspace;
> int count = 0;
> struct cleanup *old_chain;
>
> - /* Might as well prune away unneeded ones, so the user doesn't even
> - seem them. */
> - prune_program_spaces ();
> + if (prune)
> + prune_program_spaces ();
>
> /* Compute number of pspaces we will print. */
> ALL_PSPACES (pspace)
> @@ -385,7 +386,7 @@ maintenance_info_program_spaces_command (char *args, int from_tty)
> error (_("program space ID %d not known."), requested);
> }
>
> - print_program_space (current_uiout, requested);
> + print_program_space (current_uiout, requested, 0 /* prune */);
> }
>
> /* Simply returns the count of program spaces. */
Hi.
I agree we want to, in general, avoid side-effects in info commands
(even more so in maint info commands).
OTOH, as a reader of this code I wouldn't expect a print routine to
have side-effects either.
IOW, how about move the call to prune_program_spaces to whatever
caller wants it.
btw, is part of this patch missing?
Is there intended to be another caller of print_program_spaces that
passes prune = 1?
On Wednesday, September 24 2014, Doug Evans wrote:
> IOW, how about move the call to prune_program_spaces to whatever
> caller wants it.
As a note, after I commented on the patch, I noticed that the "prune"
argument may be unecessary indeed (and the "prunning" logic"), because
we are not prunning anything anymore.
Anyway, I just wanted to say that I agree with removing this part of the
code, and moving it to more suitable parts.
@@ -272,18 +272,19 @@ prune_program_spaces (void)
/* Prints the list of program spaces and their details on UIOUT. If
REQUESTED is not -1, it's the ID of the pspace that should be
- printed. Otherwise, all spaces are printed. */
+ printed. Otherwise, all spaces are printed. If PRUNE is true,
+ prune the unused program spaces prior to printing them, so they
+ won't be displayed. */
static void
-print_program_space (struct ui_out *uiout, int requested)
+print_program_space (struct ui_out *uiout, int requested, int prune)
{
struct program_space *pspace;
int count = 0;
struct cleanup *old_chain;
- /* Might as well prune away unneeded ones, so the user doesn't even
- seem them. */
- prune_program_spaces ();
+ if (prune)
+ prune_program_spaces ();
/* Compute number of pspaces we will print. */
ALL_PSPACES (pspace)
@@ -385,7 +386,7 @@ maintenance_info_program_spaces_command (char *args, int from_tty)
error (_("program space ID %d not known."), requested);
}
- print_program_space (current_uiout, requested);
+ print_program_space (current_uiout, requested, 0 /* prune */);
}
/* Simply returns the count of program spaces. */