Files
binutils-gdb/gdb/testsuite/gdb.base/page-logging.exp
Tom Tromey 93f3b8eeaa Fix pager regression
The patch to fix paging with redirection caused a regression in the
internal AdaCore test suite.  The problem occurs when running an MI
command from the CLI using interpreter-exec, when paging is enabled.
This scenario isn't covered by the current test suite, so this patch
includes a new test.

The problem is that, in this situation, MI does:

  fputs_unfiltered (strcmp (context->command, "target-select") == 0
		     ? "^connected" : "^done", mi->raw_stdout);

Here raw_stdout is a stdio_file wrapping stdout, so the pager thinks
that it is ok to buffer the output.  However, in this setup, it isn't
ok, and flushing the wrap buffer doesn't really work properly.  Also,
MI next does:

  mi_out_put (uiout, mi->raw_stdout);

... but this uses ui_file::write, which also doesn't flush the wrap
buffer.

I think all this will be fixed by the pager rewrite series I'm working
on.  However, in the meantime, adding the old gdb_stdout check back to
the pager fixes this problem.

Regression tested on x86-64 Fedora 34.
2022-01-05 06:49:08 -07:00

61 lines
1.8 KiB
Plaintext

# Copyright (C) 2021, 2022 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Do not run if gdb debug is enabled as it will interfere with log redirect.
if [gdb_debug_enabled] {
untested "debug is enabled"
return 0
}
gdb_start
gdb_test_no_output "set height 5"
gdb_test_no_output "set pagination on"
# Test that logging redirect disables the pager.
set log_name [standard_output_file log.txt]
gdb_test_no_output "set logging file $log_name" \
"set logging filename"
gdb_test_no_output "set logging redirect on"
gdb_test "set logging enabled on" "Copying debug output to .*"
set ok 1
set str "1\\n2\\n3\\n4\\n5\\n"
gdb_test_multiple "printf \"$str\"" "printf without paging" {
-re "$pagination_prompt" {
set ok 0
send_gdb "c\n"
exp_continue
}
-re "\r\n$gdb_prompt $" {
# Ok.
}
}
if {$ok} {
pass "printf without paging"
} else {
fail "printf without paging"
}
gdb_test "set logging enabled off" "Done logging to .*"
set cmd "interpreter-exec mi2 \"-data-evaluate-expression 23\""
gdb_test_multiple $cmd $cmd {
-re ".done.value=.23\[^\n\]+\r\n$gdb_prompt " {
pass "$cmd"
gdb_expect 1 {
-re "\r\n$gdb_prompt $" { }
}
}
}