1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
# Copyright 2006-2024 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/>.
# Test that the source command's verbose mode works, the 'set trace-commands'
# command works, and that the nest depth is correct in various circumstances.
gdb_exit
gdb_start
# Create a file to source
set tracecommandsscript [standard_output_file tracecommandsscript]
set fd [open "$tracecommandsscript" w]
puts $fd "\
echo in tracecommandsscript\\n
define func
echo in func \$arg0\\n
end
if 1
if 2
if 3
if 4
echo deep\\n
func 999
end
end
end
end
"
close $fd
# Make sure that the show trace-commands exists and the default is 'off'.
gdb_test "show trace-commands" "State of GDB CLI command tracing is off\\." \
"show trace-commands says off"
# Source the script with verbose mode.
gdb_test_sequence "source -v $tracecommandsscript" "source -v" {
{[\r\n]\+echo in tracecommandsscript\\n}
{[\r\n]\+define func}
{[\r\n]\+if 1}
{[\r\n]\+\+if 2}
{[\r\n]\+\+\+if 3}
{[\r\n]\+\+\+\+if 4}
{[\r\n]\+\+\+\+\+echo deep\\n}
{[\r\n]\+\+\+\+\+func 999}
{[\r\n]\+\+\+\+\+\+echo in func 999\\n}
}
# Turn on command tracing.
gdb_test_no_output "set trace-commands" "set trace-commands"
# Make sure show trace-commands now gives 'on'.
gdb_test "show trace-commands" \
{\+show trace-commands[\r\n]+State of GDB CLI command tracing is on\.} \
"show trace-commands says on"
# Simple test
gdb_test "echo hi\\n" {\+echo hi\\n[\r\n]+hi} "simple trace-commands test"
# Nested test
set strings {
{+if 1}
{++set $i = 0}
{++while $i < 5}
{+++func $i}
{++++echo in func $i\n}
{+++set $i += 1}
{+++func $i}
{++++echo in func $i\n}
{+++set $i += 1}
{+++func $i}
{++++echo in func $i\n}
{+++set $i += 1}
{+++func $i}
{++++echo in func $i\n}
{+++set $i += 1}
{+++func $i}
{++++echo in func $i\n}
{+++set $i += 1}
}
set re {}
foreach string $strings {
lappend re [string_to_regexp $string]
}
set re [join $re "\r\n(.*\r\n)?"]
set cmd "if 1\nset \$i = 0\nwhile \$i < 5\nfunc \$i\nset \$i += 1\nend\nend"
gdb_test $cmd $re "nested trace-commands test"
# Function with source works
gdb_test_sequence "define topfunc\nsource $tracecommandsscript\nend" \
"define user command" {
{[\r\n]\+define topfunc}
}
gdb_test_sequence "topfunc" "nested trace-commands test with source" {
{[\r\n]\+topfunc}
{[\r\n]\+\+source .*/tracecommandsscript}
{[\r\n]\+\+echo in tracecommandsscript\\n}
{[\r\n]\+\+define func}
{[\r\n]\+\+if 1}
{[\r\n]\+\+\+if 2}
{[\r\n]\+\+\+\+if 3}
{[\r\n]\+\+\+\+\+if 4}
{[\r\n]\+\+\+\+\+\+echo deep\\n}
{[\r\n]\+\+\+\+\+\+func 999}
{[\r\n]\+\+\+\+\+\+\+echo in func 999\\n}
}
# Test nest depth resets properly on error
set cmd "if 1\nif 2\nload\necho should not get here\\n\nend\nend"
set strings {
{+if 1}
{++if 2}
{+++load}
{No executable file specified.}
{Use the "file" or "exec-file" command.}
}
set re {}
foreach string $strings {
lappend re [string_to_regexp $string]
}
set re [join $re "\r\n(.*\r\n)?"]
gdb_test $cmd $re "depth resets on error part 1"
gdb_test "echo hi\\n" {[\r\n]\+echo hi\\n[\r\n]+hi} \
"depth resets on error part 2"
|