mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-25 16:57:52 +00:00
The output of "info breakpoints" includes breakpoint, watchpoint, tracepoint, and catchpoint if they are created, so it should show all the four types are deleted in the output of "info breakpoints" to report empty list after "delete breakpoints". It should also change the output of "delete breakpoints" to make it clear that watchpoints, tracepoints, and catchpoints are also being deleted. This is suggested by Guinevere Larsen, thank you. $ make check-gdb TESTS="gdb.base/access-mem-running.exp" $ gdb/gdb gdb/testsuite/outputs/gdb.base/access-mem-running/access-mem-running [...] (gdb) break main Breakpoint 1 at 0x12000073c: file /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c, line 32. (gdb) watch global_counter Hardware watchpoint 2: global_counter (gdb) trace maybe_stop_here Tracepoint 3 at 0x12000071c: file /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c, line 27. (gdb) catch fork Catchpoint 4 (fork) (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x000000012000073c in main at /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c:32 2 hw watchpoint keep y global_counter 3 tracepoint keep y 0x000000012000071c in maybe_stop_here at /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c:27 not installed on target 4 catchpoint keep y fork Without this patch: (gdb) delete breakpoints Delete all breakpoints? (y or n) y (gdb) info breakpoints No breakpoints or watchpoints. (gdb) info breakpoints 3 No breakpoint or watchpoint matching '3'. With this patch: (gdb) delete breakpoints Delete all breakpoints, watchpoints, tracepoints, and catchpoints? (y or n) y (gdb) info breakpoints No breakpoints, watchpoints, tracepoints, or catchpoints. (gdb) info breakpoints 3 No breakpoint, watchpoint, tracepoint, or catchpoint matching '3'. Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Approved-by: Kevin Buettner <kevinb@redhat.com> Reviewed-By: Eli Zaretskii <eliz@gnu.org>
194 lines
5.4 KiB
Plaintext
194 lines
5.4 KiB
Plaintext
# Copyright 2016-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/>.
|
|
|
|
standard_testfile
|
|
|
|
set compile_options "debug"
|
|
if {[build_executable $testfile.exp $testfile ${srcfile} ${compile_options}] == -1} {
|
|
untested "failed to compile"
|
|
return -1
|
|
}
|
|
|
|
# Ensure no output has been sent. Use MESSAGE as test message.
|
|
|
|
proc ensure_no_output {message} {
|
|
global decimal
|
|
|
|
# Run a command and use an anchor to make sure no output appears
|
|
# before the command's expected output.
|
|
gdb_test "print 999" "^\\\$$decimal = 999" $message
|
|
}
|
|
|
|
# Run a few execution-related commands on CON1, and ensure the proper
|
|
# output, or none, if appropriate, is sent to CON2. CON1_NAME and
|
|
# CON2_NAME are the names of the consoles.
|
|
|
|
proc do_execution_tests {con1 con1_name con2 con2_name} {
|
|
global srcfile
|
|
global decimal
|
|
|
|
set bp_lineno [gdb_get_line_number "set break $con1_name here"]
|
|
|
|
with_spawn_id $con1 {
|
|
gdb_test "next" "global = 1;"
|
|
}
|
|
with_spawn_id $con2 {
|
|
ensure_no_output "next causes no spurious output on other console"
|
|
}
|
|
|
|
with_spawn_id $con1 {
|
|
gdb_test "break $srcfile:$bp_lineno" \
|
|
"Breakpoint $decimal .*$srcfile, line $bp_lineno\\." \
|
|
"set breakpoint"
|
|
}
|
|
with_spawn_id $con2 {
|
|
ensure_no_output "break causes no spurious output on other console"
|
|
}
|
|
|
|
with_spawn_id $con1 {
|
|
gdb_test "continue" "set break $con1_name here .*" "continue to breakpoint"
|
|
}
|
|
|
|
with_spawn_id $con2 {
|
|
set test "breakpoint hit reported on other console"
|
|
gdb_test_multiple "" $test {
|
|
-re "Breakpoint $decimal, .* set break $con1_name here " {
|
|
pass $test
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# The test proper.
|
|
|
|
proc_with_prefix do_test {} {
|
|
global srcfile testfile
|
|
global gdb_prompt
|
|
global gdb_spawn_id
|
|
global gdb_main_spawn_id extra_spawn_id
|
|
|
|
clean_restart $testfile
|
|
|
|
if ![runto_main] {
|
|
return -1
|
|
}
|
|
|
|
gdb_test "new-ui" \
|
|
"Usage: new-ui INTERPRETER TTY" \
|
|
"new-ui without arguments"
|
|
|
|
set test "new-ui does not repeat"
|
|
send_gdb "\n"
|
|
gdb_test_multiple "" $test {
|
|
-re "^\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
|
|
# Save the main UI's spawn ID.
|
|
set gdb_main_spawn_id $gdb_spawn_id
|
|
|
|
# Create the new PTY for the secondary console UI.
|
|
spawn -pty
|
|
set extra_spawn_id $spawn_id
|
|
set extra_tty_name $spawn_out(slave,name)
|
|
gdb_test_multiple "new-ui console $extra_tty_name" "new-ui" {
|
|
-re "New UI allocated\r\n$gdb_prompt $" {
|
|
}
|
|
}
|
|
|
|
with_spawn_id $extra_spawn_id {
|
|
set test "initial prompt on extra console"
|
|
gdb_test_multiple "" $test {
|
|
-re "$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
}
|
|
|
|
# Ensure non-execution commands in one console don't cause output
|
|
# in the other consoles.
|
|
with_spawn_id $gdb_main_spawn_id {
|
|
gdb_test "print 1" "^\\\$1 = 1" "print on main console"
|
|
}
|
|
with_spawn_id $extra_spawn_id {
|
|
gdb_test "print 2" "^\\\$2 = 2" "print on extra console"
|
|
}
|
|
|
|
# Verify that we get proper queries on the main UI, but that they are
|
|
# auto-answered on secondary UIs.
|
|
with_spawn_id $gdb_main_spawn_id {
|
|
gdb_test "delete" "" "delete all breakpoints, watchpoints, tracepoints, and catchpoints on main console" \
|
|
"Delete all breakpoints, watchpoints, tracepoints, and catchpoints. .y or n. $" "n"
|
|
}
|
|
with_spawn_id $extra_spawn_id {
|
|
# Check output in two stages in order to override
|
|
# gdb_test_multiple's internal "got interactive prompt" fail
|
|
# that would otherwise match if the expect buffer happens to
|
|
# fill with partial output that ends in "(y or n) ".
|
|
set test "delete all breakpoints, watchpoints, tracepoints, and catchpoints on extra console"
|
|
gdb_test_multiple "delete" $test {
|
|
-re "Delete all breakpoints, watchpoints, tracepoints, and catchpoints. .y or n. " {
|
|
gdb_test "" \
|
|
".answered Y; input not from terminal." \
|
|
$test
|
|
}
|
|
}
|
|
}
|
|
|
|
# Run a few execution tests with the main console as the driver
|
|
# console.
|
|
with_test_prefix "main console" {
|
|
do_execution_tests \
|
|
$gdb_main_spawn_id "main console" \
|
|
$extra_spawn_id "extra console"
|
|
}
|
|
# Same, but with the extra console as driver.
|
|
with_test_prefix "extra console" {
|
|
do_execution_tests \
|
|
$extra_spawn_id "extra console" \
|
|
$gdb_main_spawn_id "main console"
|
|
}
|
|
}
|
|
|
|
# Test missing / invalid arguments.
|
|
|
|
proc_with_prefix do_test_invalid_args {} {
|
|
global testfile
|
|
|
|
clean_restart $testfile
|
|
|
|
spawn -pty
|
|
set extra_tty_name $spawn_out(slave,name)
|
|
|
|
# Test bad terminal path.
|
|
gdb_test "new-ui console /non/existent/path" \
|
|
"opening terminal failed: No such file or directory\." \
|
|
"new-ui with bad terminal path"
|
|
|
|
# Test bad interpreter name.
|
|
gdb_test "new-ui bloop $extra_tty_name" \
|
|
"Interpreter `bloop' unrecognized" \
|
|
"new-ui with bad interpreter name"
|
|
|
|
# Test that we can continue working normally.
|
|
if ![runto_main] {
|
|
return
|
|
}
|
|
}
|
|
|
|
do_test
|
|
do_test_invalid_args
|