variable displayed twice when using GDB/MI

Pedro Alves palves@redhat.com
Thu Jun 7 11:33:00 GMT 2018


On 06/05/2018 10:49 AM, Xavier Roirand wrote:
> Hello,
> 
> I'm using a simple C program:
> 
> void main() {
>         int i=0;
> }
> 
> When debugging with MI interpreter, I want to display variable i:
> 
> (gdb)
> -break-insert main
> ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000000000040049b",func="main",file="foo.c",fullname="/tmp/foo.c",line="2",thread-groups=["i1"],times="0",original-location="main"}
> (gdb)
> -exec-run
> [...]
> display i
> &"display i\n"
> ~"1: i = 0"
> ~"\n"
> ^done
> (gdb)
> 
> If I do a 'next':
> 
> (gdb)
> n
> &"n\n"
> ^running
> *running,thread-id="all"
> (gdb)
> ~"1: i = 0"
> ~"\n"
> ~"3\t}\n"
> ~"1: i = 0"
> ~"\n"
> [...]
> (gdb)
> 
> The variable i is displayed twice, is it expected ? Using CLI interpreter it's displayed only once so I'm wondering if this is expected or not ?
This is GDB printing the stop event on both the CLI uiout and on
the MI uiout, from mi_on_normal_stop_1:

      print_stop_event (mi_uiout);

      console_interp = interp_lookup (current_ui, INTERP_CONSOLE);
      if (should_print_stop_to_console (console_interp, tp))
	print_stop_event (mi->cli_uiout);

See intro comment on should_print_stop_to_console, please.

print_stop_event is what currently calls "do_displays",
so we print the displays twice.

Fixing this probably needs to take in consideration whether
we print the displays on the CLI uiout even if the stop
isn't printed there according to should_print_stop_to_console.
I.e., what makes more sense for a user that enabled some display,
but then stepped with the frontend's "step" buttons instead of
typing "next" or "step".  Probably we shouldn't print the
displays in that case, just to keep things simple, respecting
should_print_stop_to_console, but not 100% sure.

Thanks,
Pedro Alves



More information about the Gdb mailing list