1 # Copyright
1999-2022 Free Software Foundation
, Inc.
3 # This
program is free software
; you can redistribute it and
/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation
; either version
3 of the License
, or
6 #
(at your option
) any later version.
8 # This
program is distributed in the hope that it will be useful
,
9 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License
for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this
program.
If not
, see
<http
://www.gnu.org
/licenses
/>.
17 # Test essential Machine interface
(MI
) operations
19 # Verify that
, using the MI
, we can run a simple
program and perform basic
20 # debugging activities like
: insert breakpoints
, run the
program,
21 # step
, next
, continue until it ends and
, last but not least
, quit.
23 # The goal is not to test gdb functionality
, which is done by other tests
,
24 # but to verify the correct output response to MI operations.
27 load_lib mi
-support.exp
35 standard_testfile basics.c
37 if { [gdb_compile
"${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
38 untested
"failed to compile"
43 mi_gdb_reinitialize_dir $srcdir
/$subdir
44 mi_gdb_reinitialize_dir $srcdir
/$subdir
45 mi_gdb_load $
{binfile
}
47 proc test_breakpoints_creation_and_listing
{} {
50 set line_callee4_head
[gdb_get_line_number
"callee4 ("]
51 set line_callee4_body
[expr $line_callee4_head
+ 2]
52 set line_callee3_head
[gdb_get_line_number
"callee3 ("]
53 set line_callee3_body
[expr $line_callee3_head
+ 2]
54 set line_callee2_head
[gdb_get_line_number
"callee2 ("]
55 set line_callee2_body
[expr $line_callee2_head
+ 2]
56 set line_main_head
[gdb_get_line_number
"main ("]
57 set line_main_body
[expr $line_main_head
+ 2]
59 # Insert some breakpoints and list them
60 # Also
, disable some so they
do not interfere with other tests
68 lappend bps
[mi_create_breakpoint
"--qualified main" \
69 "break-insert operation" \
70 -number
1 -func main
-file
".*basics.c" \
71 -line $line_main_body
]
73 lappend bps
[mi_create_breakpoint
"basics.c:callee2" \
74 "insert breakpoint at basics.c:callee2" \
75 -number
2 -func callee2
-file
".*basics.c" \
76 -line $line_callee2_body
]
78 lappend bps
[mi_create_breakpoint
"basics.c:$line_callee3_head" \
79 "insert breakpoint at basics.c:\$line_callee3_head" \
80 -number
3 -func callee3
-file
".*basics.c" \
81 -line $line_callee3_body
]
83 lappend bps
[mi_create_breakpoint \
84 "\"\\\"${srcfile}\\\":$line_callee4_head\"" \
85 "insert breakpoint at \"<fullfilename>\":\$line_callee4_head" \
86 -number
4 -func callee4
-file
".*basics.c" \
87 -line $line_callee4_body
]
89 mi_gdb_test
"204-break-list" \
90 "204\\^done,[mi_make_breakpoint_table $bps]" \
93 mi_gdb_test
"205-break-disable 2 3 4" \
95 "disabling of breakpoints"
97 set bp2
[mi_make_breakpoint
-number
2 -enabled n
]
98 mi_gdb_test
"206-break-info 2" \
99 "206\\^done,[mi_make_breakpoint_table [list $bp2]]"\
100 "list of breakpoints, 16 disabled"
103 proc test_running_the_program
{} {
104 set line_main_head
[gdb_get_line_number
"main ("]
105 set line_main_body
[expr $line_main_head
+ 2]
107 # Run the
program without
args, then specify srgs and rerun the
program
112 # mi_gdb_test cannot be used
for asynchronous commands because there are
113 # two prompts involved and this can
lead to a race condition.
114 # The following is equivalent to a send_gdb
"000-exec-run\n"
116 mi_expect_stop
"breakpoint-hit" "main" "" ".*basics.c" "$line_main_body" \
117 { "" "disp=\"keep\"" } "run to main"
120 proc test_controlled_execution
{} {
123 set line_callee4_head
[gdb_get_line_number
"callee4 ("]
124 set line_callee4_body
[expr $line_callee4_head
+ 2]
125 set line_callee3_head
[gdb_get_line_number
"callee3 ("]
126 set line_callee3_call
[expr $line_callee3_head
+ 2]
127 set line_callee3_close_brace
[expr $line_callee3_head
+ 3]
128 set line_callee1_head
[gdb_get_line_number
"callee1 ("]
129 set line_callee1_body
[expr $line_callee1_head
+ 2]
130 set line_main_head
[gdb_get_line_number
"main ("]
131 set line_main_body
[expr $line_main_head
+ 2]
133 #
Continue execution until a breakpoint is reached
, step into calls
, verifying
134 #
if the arguments are correctly shown
, continue to the end of a called
135 # function
, step over a
call (next
).
142 mi_next_to
"main" "" "basics.c" [expr $line_main_body + 1] "next at main"
144 # FIXME
: A string
argument is not printed right
; should be fixed and
145 # we should look
for the right thing here.
146 # NOTE
: The ``
\\\\\"'' is
for \".
147 mi_step_to
"callee1" \
148 "\{name=\"intarg\",value=\"2\"\},\{name=\"strarg\",value=\"$hex \\\\\"A string argument\.\\\\\"\"\},\{name=\"fltarg\",value=\"3.5\"\}" \
149 "basics.c" "$line_callee1_body" "step at main"
151 # FIXME
: A string
argument is not printed right
; should be fixed and
152 # we should look
for the right thing here.
153 mi_execute_to
"exec-step 3" "end-stepping-range" "callee4" "" \
154 "basics.c" $line_callee4_body "" "step to callee4"
156 # FIXME
: A string
argument is not printed right
; should be fixed and
157 # we should look
for the right thing here.
158 # NOTE
: The ``.
'' is part of ``gdb
-result
-var
="$1"''
159 mi_finish_to
"callee3" ".*" "basics.c" \
160 "($line_callee3_call|$line_callee3_close_brace)" ".1" "0" "exec-finish"
163 proc test_controlling_breakpoints
{} {
164 # Enable
, delete, set ignore counts in breakpoints
165 #
(disable was already tested above
)
174 proc test_program_termination
{} {
175 # Run to completion
: normal and forced
178 #
(normal termination of inferior
)
180 mi_execute_to
"exec-continue" "exited-normally" "" "" "" "" "" "continue to end"
183 test_breakpoints_creation_and_listing
184 test_running_the_program
185 test_controlled_execution
186 test_controlling_breakpoints
187 test_program_termination