blob: c936d2280975e3e73a2fabc167c0855c41873f5d (
plain)
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-2023 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"
|