binutils-gdb/gdb/testsuite/gdb.base/save-bp.exp

88 lines
3.1 KiB
Plaintext
Raw Normal View History

# Copyright (C) 2011-2014 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 .c
if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile] } {
return -1
}
if ![runto_main] {
untested ${testfile}.exp
return -1
}
# Delete all breakpoints so that the "runto_main" breakpoint above
# does not interfere with our testing.
delete_breakpoints
# Insert a bunch of breakpoints... The goal is to create breakpoints
# that we are going to try to save in a file and then reload. So
# try to create a good variety of them.
gdb_breakpoint "break_me"
set loc_bp2 [gdb_get_line_number "BREAK HERE"]
gdb_breakpoint ${srcfile}:${loc_bp2}
set loc_bp3 [gdb_get_line_number "thread-specific"]
gdb_breakpoint "${srcfile}:${loc_bp3} thread 1"
set loc_bp4 [gdb_get_line_number "condition"]
gdb_breakpoint "${srcfile}:${loc_bp4} if i == 1"
set loc_bp5 [gdb_get_line_number "with commands"]
gdb_breakpoint ${srcfile}:${loc_bp5}
gdb_test "commands\nsilent\nend" "End with.*" "add breakpoint commands"
gdb_test "dprintf ${srcfile}:${loc_bp5},\"At foo entry\\n\"" "Dprintf .*"
# Now, save the breakpoints into a file...
if {[is_remote host]} {
set bps bps
} else {
set bps [standard_output_file bps]
}
remote_file host delete "$bps"
gdb_test "save breakpoint $bps" "" "save breakpoint bps"
# Now start a new debugger session...
clean_restart $testfile
if ![runto_main] {
fail "cannot restart program"
return -1
}
# Delete all breakpoints so that the "runto_main" breakpoint above
# does not interfere with our testing.
delete_breakpoints
# ... and restore the breakpoints.
gdb_test "source $bps" "" "source bps"
# Now, verify that all breakpoints have been created correctly...
set bp_row_start "\[0-9\]+ +breakpoint +keep +y +0x\[0-9a-f\]+ +in"
set dprintf_row_start "\[0-9\]+ +dprintf +keep +y +0x\[0-9a-f\]+ +in"
Use gdb_test_sequence in gdb.base/save-bp.exp. But IMO it is a functionality regression as: * gdb_test_sequence permits arbitary number of lines of text between those lines being matched. Former regex string did not allow it. This may make a difference if GDB regresses by printing some unexpected line after the breakpoint info line (like a "silent" line). > * \[\r\n\]+ can be used to anchor the beginning of the pattern, in the sense > of Perl regex ^ /m match. At least I have found such cases in existing > *.exp files so I used that. Using ^ really does not work. > > But I am not aware how to do Perl regex $ /m match. Using $ really does > not work. But this means that for example the trailing > ( \\((host|target) evals\\))? > on the line > "\[\r\n\]+\[ \t\]+stop only if i == 1( \\((host|target) evals\\))?" > originally made sense there but now it can be removed as it has no longer > any functionality there - it will match now any trailing line garbage. by Yao Qi: In this test case, ( \\((host|target) evals\\))? isn't needed in the pattern. What we test here is to save breakpoints into file and restore them from file. The contents saved in file are: break save-bp.c:31 condition $bpnum i == 1 the information about the place where the condition is evaluated isn't saved, so we don't need to check. Breakpoint save and restore has nothing to do with where the condition is evaluated (host or target). I am fine to leave it here now. gdb/testsuite/ChangeLog 2014-10-09 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.base/save-bp.exp (info break): Use gdb_test_sequence.
2014-10-12 21:47:13 +02:00
gdb_test_sequence "info break" "info break" [list \
"\[\r\n\]+Num +Type +Disp +Enb +Address +What" \
"\[\r\n\]+$bp_row_start break_me at \[^\r\n\]*$srcfile:\[0-9\]+" \
"\[\r\n\]+$bp_row_start main at \[^\r\n\]*$srcfile:$loc_bp2" \
"\[\r\n\]+$bp_row_start main at \[^\r\n\]*$srcfile:$loc_bp3 +thread 1" \
"\[\r\n\]+\[ \t]+stop only in thread 1" \
"\[\r\n\]+$bp_row_start main at \[^\r\n\]*$srcfile:$loc_bp4" \
"\[\r\n\]+\[ \t\]+stop only if i == 1( \\((host|target) evals\\))?" \
"\[\r\n\]+$bp_row_start main at \[^\r\n\]*$srcfile:$loc_bp5" \
"\[\r\n\]+\[ \t\]+silent" \
"\[\r\n\]+$dprintf_row_start main at \[^\r\n\]*$srcfile:$loc_bp5" \
"\[\r\n\]+\[ \t\]+printf" \
]