Re: [PATCH][gdb] Make INTERP_TUI's default ui_out the INTERP_CONSOLE ui_out

Tom de Vries
2019-10-01T12:59:10Z

[-- Attachment #1: Type: text/plain, Size: 1500 bytes --]

On 25-09-19 10:36, Andrew Burgess wrote:
> * Tom de Vries <tdevries@suse.de> [2019-09-25 01:20:22 +0200]:
>
>> On 24-09-19 19:31, Andrew Burgess wrote:
>>> With this patch applied I see the fixed behaviour you describe at the
>>> CLI, however, if I do:
>>>
>>> (gdb) define mybt
>>> bt
>>> end
>>> (gdb) start
>>> (gdb) set logging redirect on
>>> (gdb) tui enable
>>> (gdb) set logging on
>>> (gdb) mybt
>>>
>>> The I see output appear on both the console and in the log file.
>>
>> I can't reproduce this. Are you sure you removed the gdb.txt file before
>> starting gdb?
>
> You're absolutely right, nothing goes to the log for `mybt`, this was
> a silly mistake on my side. Apologies. However...
>
> With tui enabled and logging on and redirect on, the 'bt' __does__
> write to the log, while 'mybt' writes to the screen. This is the same
> bug you're fixing for non-tui mode, correct?

From user perspective, yes.

> Any solution should
> ideally address both cases, or at least be accompanied with an
> explanation for why these problems are distinct and should be solved
> separately.
>

Ideally yes, agreed.

This tentative patch fixes both cases, by limiting the fix of commit
3a87ae656c28 "Use console uiout when executing breakpoint commands" to
the case for which the corresponding problem was reported: INTERP_MI. [
Adding CC simark ]

At this point I don't understand yet why special-casing INTERP_MI would
be the correct thing to do here.

Thanks,
- Tom

[-- Attachment #2: tmp.patch --]
[-- Type: text/x-patch, Size: 892 bytes --]

diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c
index 4fc9c70259c..c8a837bf0f5 100644
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -699,9 +699,14 @@ execute_control_command (struct command_line *cmd, int from_tty)
{
/* Make sure we use the console 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 (&current_uiout, console->interp_ui_out ());
+ if (current_interp_named_p (INTERP_MI))
+ {
+ interp *console = interp_lookup (current_ui, INTERP_CONSOLE);
+ scoped_restore save_uiout
+ = make_scoped_restore (&current_uiout, console->interp_ui_out ());
+
+ return execute_control_command_1 (cmd, from_tty);
+ }

return execute_control_command_1 (cmd, from_tty);
}