summaryrefslogtreecommitdiff
path: root/gdb/infrun.h
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2019-03-12 12:56:01 -0600
committerTom Tromey <tromey@adacore.com>2019-03-19 12:16:48 -0600
commit4c7d57e72e0340931ab01db2247bdce3c2fcadb7 (patch)
treecb73a7ab56d890e868d983aec7338b097d453f10 /gdb/infrun.h
parentcb24623460fe3e68794b79b79b0dbd5e62598d85 (diff)
Don't show "display"s twice in MI
If you run "gdb -i=mi2" and set a "display", then when "next"ing the displays will be shown twice: ~"1: x = 23\n" ~"7\t printf(\"%d\\n\", x);\n" ~"1: x = 23\n" *stopped,reason="end-stepping-range",frame={addr="0x0000000000400565",func="main",args=[],file="q.c",fullname="/tmp/q.c",line="7"},thread-id="1",stopped-threads="all",core="1" The immediate cause of this is this code in 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); ... which obviously prints the stop twice. However, I think the first call to print_stop_event is intended just to emit the MI *stopped notification, which explains why the source line does not show up two times. This patch fixes the bug by changing print_stop_event to only call do_displays for non-MI-like ui-outs. Tested on x86-64 Fedora 29. gdb/ChangeLog 2019-03-19 Tom Tromey <tromey@adacore.com> * mi/mi-interp.c (mi_on_normal_stop_1): Only show displays once. * infrun.h (print_stop_event): Add "displays" parameter. * infrun.c (print_stop_event): Add "displays" parameter. gdb/testsuite/ChangeLog 2019-03-19 Tom Tromey <tromey@adacore.com> * gdb.mi/mi2-cli-display.c: New file. * gdb.mi/mi2-cli-display.exp: New file.
Diffstat (limited to 'gdb/infrun.h')
-rw-r--r--gdb/infrun.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/gdb/infrun.h b/gdb/infrun.h
index 8f61b75c15..e53fd81e71 100644
--- a/gdb/infrun.h
+++ b/gdb/infrun.h
@@ -167,9 +167,10 @@ extern void print_return_value (struct ui_out *uiout,
/* Print current location without a level number, if we have changed
functions or hit a breakpoint. Print source line if we have one.
- If the execution command captured a return value, print it. */
+ If the execution command captured a return value, print it. If
+ DISPLAYS is false, do not call 'do_displays'. */
-extern void print_stop_event (struct ui_out *uiout);
+extern void print_stop_event (struct ui_out *uiout, bool displays = true);
/* Pretty print the results of target_wait, for debugging purposes. */