📄 pending.exp
字号:
# Copyright 2003, 2004, 2005, 2007, 2008 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/>.# This file was created by Jeff Johnston. (jjohnstn@redhat.com)if $tracelevel then { strace $tracelevel}## test running programs#set prms_id 0set bug_id 0if {[skip_shlib_tests]} { return 0}set testfile "pending"set libfile "pendshr"set srcfile $testfile.cset libsrc $srcdir/$subdir/$libfile.cset binfile $objdir/$subdir/$testfileset lib_sl $objdir/$subdir/$libfile.slset lib_opts debugset exec_opts [list debug shlib=$lib_sl]if [get_compiler_info ${binfile}] { return -1}if { [gdb_compile_shlib $libsrc $lib_sl $lib_opts] != "" || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $exec_opts] != ""} { untested "Could not compile either $libsrc or $srcdir/$subdir/$srcfile." return -1}# Start with a fresh gdb.gdb_exitgdb_startgdb_reinitialize_dir $srcdir/$subdirgdb_load ${binfile}gdb_load_shlibs $lib_slif [target_info exists gdb_stub] { gdb_step_for_stub;}## Test setting, querying, and modifying pending breakpoints#gdb_test_multiple "break pendfunc1" "set pending breakpoint" { -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { gdb_test "y" "Breakpoint.*pendfunc1.*pending." "set pending breakpoint" }}gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendfunc1.*" \"single pending breakpoint info"## Test breaking at existing function#set mainline [gdb_get_line_number "break main here"]gdb_test "break main" \ "Breakpoint.*at.* file .*$srcfile, line $mainline.*" \ "breakpoint function"gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendfunc1.*\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \"pending plus real breakpoint info"# # Test not setting a pending breakpoint #gdb_test_multiple "break pendfunc2" "Don't set pending breakpoint" { -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { gdb_test "n" "" "Don't set pending breakpoint" }}## Add condition to pending breakpoint #gdb_test "condition 1 k == 1" ""gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendfunc1.*\[\t \]+stop only if k == 1.*\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \"pending plus condition"## Disable pending breakpoint#gdb_test "disable 1" ""gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.*\[\t \]+stop only if k == 1.*\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \"pending disabled"## Add commands to pending breakpoint#gdb_test "commands 1\nprint k\nend" "" \ "Set commands for pending breakpoint"gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.*\[\t \]+stop only if k == 1.*\[\t \]+print k.*\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline" \"pending disabled plus commands"## Try a pending break for a line in a source file with a condition#set bp2_loc [gdb_get_line_number "y = x + 4" ${libfile}.c]gdb_test_multiple "break pendshr.c:$bp2_loc if x > 3" "Set pending breakpoint 2" { -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { gdb_test "y" "Breakpoint.*pendshr.c:$bp2_loc.*pending." \ "Set pending breakpoint 2" }}gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.*\[\t \]+stop only if k == 1.*\[\t \]+print k.*\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline.*\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendshr.c:$bp2_loc if x > 3.*" \"multiple pending breakpoints"## Try a pending break for a line in a source file with ignore count:#set bp3_loc [gdb_get_line_number "printf" ${libfile}.c]gdb_test_multiple "break pendshr.c:$bp3_loc" "Set pending breakpoint 3" { -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { gdb_test "y" "Breakpoint.*pendshr.c:$bp3_loc.*pending." \ "Set pending breakpoint 3" }}gdb_test {ignore $bpnum 2} "Will ignore next 2 crossings of breakpoint .*" \ "set ignore count on pending breakpoint 3"gdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep n.*PENDING.*pendfunc1.*\[\t \]+stop only if k == 1.*\[\t \]+print k.*\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline.*\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendshr.c:$bp2_loc if x > 3.*\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendshr.c:$bp3_loc.*ignore next 2 hits.*" \"multiple pending breakpoints 2"## Run to main which should resolve a pending breakpoint#gdb_run_cmdgdb_test "" \".*Breakpoint.*, main.*$mainline.*" \"running to main"## Re-enable the first pending breakpoint which should resolve#gdb_test "enable 1" \"" \"re-enabling pending breakpoint that can resolve instantly"## Continue to verify conditionals and commands for breakpoints are honored#gdb_test "continue" \".*Breakpoint.*pendfunc1.*at.*pendshr.c:$bp2_loc.*4;" \"continue to resolved breakpoint 2"gdb_test "continue" \".*Breakpoint.*pendfunc1.*at.*pendshr.c:$bp2_loc.*\[$\]1 = 1." \"continue to resolved breakpoint 1"## Disable the other two breakpoints, and continue to the one with# the ignore count. Make sure you hit it the third time, x should# be 3 then.#gdb_test "disable 7" "" "Disable other breakpoints"gdb_test "disable 5" "" "Disable other breakpoints"gdb_test "continue" \ ".*Breakpoint.*pendfunc1.*\\\(x=3\\\) at.*pendshr.c:$bp3_loc.*printf.*;" \"continue to resolved breakpoint 3"delete_breakpointsgdb_breakpoint "main"## Set non-existent pending breakpoint#gdb_test_multiple "break imaginary" "set imaginary pending breakpoint" { -re ".*Make breakpoint pending.*y or \\\[n\\\]. $" { gdb_test "y" "Breakpoint.*imaginary.*pending." \ "set imaginary pending breakpoint" }}## rerun program and make sure that any pending breakpoint remains and no# error messages are issued for the missing function#rerun_to_maingdb_test "info break" \ "Num Type\[ \]+Disp Enb Address\[ \]+What.*\[0-9\]+\[\t \]+breakpoint keep y.* in main at .*$srcfile:$mainline.*\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*imaginary.*" \"verify pending breakpoint after restart"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -