From: Simon Marchi <simon.marchi@polymtl.ca>
To: gdb-patches@sourceware.org
Cc: eliz@gnu.org, Simon Marchi <simon.marchi@polymtl.ca>
Subject: [PATCH] Use console uiout when executing breakpoint commands
Date: Sat, 21 Oct 2017 18:41:00 -0000 [thread overview]
Message-ID: <20171021184121.694-1-simon.marchi@polymtl.ca> (raw)
In-Reply-To: <83vaj8c3fj.fsf@gnu.org>
As reported here
https://sourceware.org/ml/gdb/2017-10/msg00020.html
the output of certain commands, like backtrace, doesn't appear anywhere
when it is run as a breakpoint command and when using MI.
The reason is that the current_uiout is set to the mi_ui_out while these
commands run, whereas we want the output as CLI output. Some commands
like "print" work, because they use printf_filtered (gdb_stdout, ...)
directly, bypassing the current ui_out.
The fix I did is to force setting the cli_uiout as the current_uiout
when calling execute_control_command. I am not sure if this is the
right way to fix the problem, comments about the approach would be
appreciated.
I enhanced gdb.mi/mi-break.exp to test the backtrace command.
Regtested on the buildbot.
gdb/ChangeLog:
* cli/cli-script.c (execute_control_command): Rename to ...
(execute_control_command_1): ... this.
(execute_control_command): New function.
gdb/testsuite/ChangeLog:
* gdb.mi/mi-break.exp (test_breakpoint_commands): Test backtrace
as a breakpoint command.
---
gdb/cli/cli-script.c | 23 +++++++++++++++++++----
gdb/testsuite/gdb.mi/mi-break.exp | 4 ++--
2 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index 0a93e8b54f..8fbdc83c5c 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -463,8 +463,10 @@ print_command_trace (const char *cmd)
printf_filtered ("%s\n", cmd);
}
-enum command_control_type
-execute_control_command (struct command_line *cmd)
+/* Helper for execute_control_command. */
+
+static enum command_control_type
+execute_control_command_1 (struct command_line *cmd)
{
struct command_line *current;
struct value *val;
@@ -541,7 +543,7 @@ execute_control_command (struct command_line *cmd)
{
scoped_restore save_nesting
= make_scoped_restore (&command_nest_depth, command_nest_depth + 1);
- ret = execute_control_command (current);
+ ret = execute_control_command_1 (current);
/* If we got an error, or a "break" command, then stop
looping. */
@@ -600,7 +602,7 @@ execute_control_command (struct command_line *cmd)
{
scoped_restore save_nesting
= make_scoped_restore (&command_nest_depth, command_nest_depth + 1);
- ret = execute_control_command (current);
+ ret = execute_control_command_1 (current);
/* If we got an error, get out. */
if (ret != simple_control)
@@ -644,6 +646,19 @@ execute_control_command (struct command_line *cmd)
return ret;
}
+enum command_control_type
+execute_control_command (struct command_line *cmd)
+{
+ /* Make sure we use the console interp and uiout. It's possible
+ that we are executing breakpoint commands while running the MI
+ interpreter. */
+ interp *console = interp_lookup (current_ui, INTERP_CONSOLE);
+ scoped_restore save_uiout
+ = make_scoped_restore (¤t_uiout, interp_ui_out (console));
+
+ return execute_control_command_1 (cmd);
+}
+
/* Like execute_control_command, but first set
suppress_next_print_command_trace. */
diff --git a/gdb/testsuite/gdb.mi/mi-break.exp b/gdb/testsuite/gdb.mi/mi-break.exp
index 38670c293b..41a48a1400 100644
--- a/gdb/testsuite/gdb.mi/mi-break.exp
+++ b/gdb/testsuite/gdb.mi/mi-break.exp
@@ -277,7 +277,7 @@ proc test_breakpoint_commands {} {
-number 9 -disp keep -func callee2 -file ".*basics.c" \
-line $line_callee2_body
- mi_gdb_test "-break-commands 9 \"set \$i=0\" \"while \$i<10\" \"print \$i\" \"set \$i=\$i+1\" \"end\" \"continue\" " \
+ mi_gdb_test "-break-commands 9 \"bt\" \"set \$i=0\" \"while \$i<10\" \"print \$i\" \"set \$i=\$i+1\" \"end\" \"continue\" " \
"\\^done" \
"breakpoint commands: set commands"
@@ -291,7 +291,7 @@ proc test_breakpoint_commands {} {
set test "intermediate stop and continue, bp commands"
gdb_expect {
-i $gdb_main_spawn_id
- -re ".*\\\$1 = 0.*\\\$10 = 9" {
+ -re ".*callee2.*callee1.*main.*\\\$1 = 0.*\\\$10 = 9" {
pass $test
}
timeout {
--
2.14.2
next prev parent reply other threads:[~2017-10-21 18:41 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <8360bqt0im.fsf@gnu.org>
[not found] ` <8a3d7153-7486-032f-aabc-6c3453f96459@simark.ca>
[not found] ` <83shetsdg2.fsf@gnu.org>
[not found] ` <e65519d3-37e8-06f0-cd5a-d7e6b7aaf31d@simark.ca>
[not found] ` <83o9phs8zw.fsf@gnu.org>
[not found] ` <b0ce9014-a231-6d57-8a72-6da1eb80f67b@simark.ca>
[not found] ` <83d15wsrvw.fsf@gnu.org>
[not found] ` <83bmlgsqpm.fsf@gnu.org>
[not found] ` <fb95da6b-2390-f486-0806-291d24fbe766@simark.ca>
2017-10-21 8:26 ` Breakpoint commands in MI mode and "backtrace" Eli Zaretskii
[not found] ` <f54ff4bc-fb7c-397f-153d-83cafb6966bd@simark.ca>
2017-10-21 16:27 ` Eli Zaretskii
2017-10-21 18:41 ` Simon Marchi [this message]
2017-11-01 1:37 ` [PATCH] Use console uiout when executing breakpoint commands Simon Marchi
2017-11-01 3:45 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171021184121.694-1-simon.marchi@polymtl.ca \
--to=simon.marchi@polymtl.ca \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox