📄 sepdebug.exp
字号:
gdb_expect { -re "Breakpoint.*at.* file .*$srcfile, line $bp_location2.*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" } -re ".*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" } timeout { fail "Temporary breakpoint line number in file #1 (timeout)" }}set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]gdb_test "tbreak $srcfile:$bp_location11" "Breakpoint.*at.* file .*$srcfile, line $bp_location11.*" "Temporary breakpoint line number in file #2"## check to see what breakpoints are set (temporary this time)#gdb_test "info break" "Num Type.*Disp Enb Address.*What.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$main_line.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint del.*y.*in factorial at .*$srcfile:$bp_location7.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$bp_location1.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$bp_location6.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$bp_location2.*\[\r\n\]\[0-9\]+\[\t \]+breakpoint del.*y.*in main at .*$srcfile:$bp_location11.*" \ "Temporary breakpoint info"#***********# Verify that catchpoints for fork, vfork and exec don't trigger# inappropriately. (There are no calls to those system functions# in this test program.)#if ![runto_main] then { fail "break tests suppressed" }send_gdb "catch\n"gdb_expect { -re "Catch requires an event name.*$gdb_prompt $"\ {pass "catch requires an event name"} -re "$gdb_prompt $"\ {fail "catch requires an event name"} timeout {fail "(timeout) catch requires an event name"}}set name "set catch fork, never expected to trigger"send_gdb "catch fork\n"gdb_expect { -re "Catchpoint \[0-9\]* .fork..*$gdb_prompt $" {pass $name} -re "Catch of fork not yet implemented.*$gdb_prompt $" {pass $name} -re "$gdb_prompt $" {fail $name} timeout {fail "(timeout) $name"}}set name "set catch vfork, never expected to trigger"send_gdb "catch vfork\n"# If we are on HP-UX 10.20, we expect an error message to be# printed if we type "catch vfork" at the gdb gdb_prompt. This is# because on HP-UX 10.20, we cannot catch vfork events.if [istarget "hppa*-hp-hpux10.20"] then { gdb_expect { -re "Catch of vfork events not supported on HP-UX 10.20..*$gdb_prompt $" {pass $name} -re "$gdb_prompt $" {fail $name} timeout {fail "(timeout) $name"} }} else { gdb_expect { -re "Catchpoint \[0-9\]* .vfork..*$gdb_prompt $" {pass $name} -re "Catch of vfork not yet implemented.*$gdb_prompt $" {pass $name} -re "$gdb_prompt $" {fail $name} timeout {fail "(timeout) $name"} }}set name "set catch exec, never expected to trigger"send_gdb "catch exec\n"gdb_expect { -re "Catchpoint \[0-9\]* .exec..*$gdb_prompt $" {pass $name} -re "Catch of exec not yet implemented.*$gdb_prompt $" {pass $name} -re "$gdb_prompt $" {fail $name} timeout {fail "(timeout) $name"}}# Verify that GDB responds gracefully when asked to set a breakpoint# on a nonexistent source line.#send_gdb "break 999\n"gdb_expect { -re "No line 999 in file .*$gdb_prompt $"\ {pass "break on non-existent source line"} -re "$gdb_prompt $"\ {fail "break on non-existent source line"} timeout {fail "(timeout) break on non-existent source line"}}# Run to the desired default location. If not positioned here, the# tests below don't work.#gdb_test "until $bp_location1" "main .* at .*:$bp_location1.*" "until bp_location1"# Verify that GDB allows one to just say "break", which is treated# as the "default" breakpoint. Note that GDB gets cute when printing# the informational message about other breakpoints at the same# location. We'll hit that bird with this stone too.#send_gdb "break\n"gdb_expect { -re "Breakpoint \[0-9\]*.*$gdb_prompt $"\ {pass "break on default location, 1st time"} -re "$gdb_prompt $"\ {fail "break on default location, 1st time"} timeout {fail "(timeout) break on default location, 1st time"}}send_gdb "break\n"gdb_expect { -re "Note: breakpoint \[0-9\]* also set at .*Breakpoint \[0-9\]*.*$gdb_prompt $"\ {pass "break on default location, 2nd time"} -re "$gdb_prompt $"\ {fail "break on default location, 2nd time"} timeout {fail "(timeout) break on default location, 2nd time"}}send_gdb "break\n"gdb_expect { -re "Note: breakpoints \[0-9\]* and \[0-9\]* also set at .*Breakpoint \[0-9\]*.*$gdb_prompt $"\ {pass "break on default location, 3rd time"} -re "$gdb_prompt $"\ {fail "break on default location, 3rd time"} timeout {fail "(timeout) break on default location, 3rd time"}}send_gdb "break\n"gdb_expect { -re "Note: breakpoints \[0-9\]*, \[0-9\]* and \[0-9\]* also set at .*Breakpoint \[0-9\]*.*$gdb_prompt $"\ {pass "break on default location, 4th time"} -re "$gdb_prompt $"\ {fail "break on default location, 4th time"} timeout {fail "(timeout) break on default location, 4th time"}}# Verify that a "silent" breakpoint can be set, and that GDB is indeed# "silent" about its triggering.#if ![runto_main] then { fail "break tests suppressed" }send_gdb "break $bp_location1\n"gdb_expect { -re "Breakpoint (\[0-9\]*) at .*, line $bp_location1.*$gdb_prompt $"\ {pass "set to-be-silent break bp_location1"} -re "$gdb_prompt $"\ {fail "set to-be-silent break bp_location1"} timeout {fail "(timeout) set to-be-silent break bp_location1"}}send_gdb "commands $expect_out(1,string)\n"send_gdb "silent\n"send_gdb "end\n"gdb_expect { -re ".*$gdb_prompt $"\ {pass "set silent break bp_location1"} timeout {fail "(timeout) set silent break bp_location1"}}send_gdb "info break $expect_out(1,string)\n"gdb_expect { -re "\[0-9\]*\[ \t\]*breakpoint.*:$bp_location1\r\n\[ \t\]*silent.*$gdb_prompt $"\ {pass "info silent break bp_location1"} -re "$gdb_prompt $"\ {fail "info silent break bp_location1"} timeout {fail "(timeout) info silent break bp_location1"}}send_gdb "continue\n"gdb_expect { -re "Continuing.\r\n$gdb_prompt $"\ {pass "hit silent break bp_location1"} -re "$gdb_prompt $"\ {fail "hit silent break bp_location1"} timeout {fail "(timeout) hit silent break bp_location1"}}send_gdb "bt\n"gdb_expect { -re "#0 main .* at .*:$bp_location1.*$gdb_prompt $"\ {pass "stopped for silent break bp_location1"} -re "$gdb_prompt $"\ {fail "stopped for silent break bp_location1"} timeout {fail "(timeout) stopped for silent break bp_location1"}}# Verify that GDB can at least parse a breakpoint with the# "thread" keyword. (We won't attempt to test here that a# thread-specific breakpoint really triggers appropriately.# The gdb.threads subdirectory contains tests for that.)#set bp_location12 [gdb_get_line_number "set breakpoint 12 here"]send_gdb "break $bp_location12 thread 999\n"gdb_expect { -re "Unknown thread 999.*$gdb_prompt $"\ {pass "thread-specific breakpoint on non-existent thread disallowed"} -re "$gdb_prompt $"\ {fail "thread-specific breakpoint on non-existent thread disallowed"} timeout {fail "(timeout) thread-specific breakpoint on non-existent thread disallowed"}}send_gdb "break $bp_location12 thread foo\n"gdb_expect { -re "Junk after thread keyword..*$gdb_prompt $"\ {pass "thread-specific breakpoint on bogus thread ID disallowed"} -re "$gdb_prompt $"\ {fail "thread-specific breakpoint on bogus thread ID disallowed"} timeout {fail "(timeout) thread-specific breakpoint on bogus thread ID disallowed"}}# Verify that GDB responds gracefully to a breakpoint command with# trailing garbage.#send_gdb "break $bp_location12 foo\n"gdb_expect { -re "Junk at end of arguments..*$gdb_prompt $"\ {pass "breakpoint with trailing garbage disallowed"} -re "$gdb_prompt $"\ {fail "breakpoint with trailing garbage disallowed"} timeout {fail "(timeout) breakpoint with trailing garbage disallowed"}}# Verify that GDB responds gracefully to a "clear" command that has# no matching breakpoint. (First, get us off the current source line,# which we know has a breakpoint.)#send_gdb "next\n"gdb_expect { -re ".*$gdb_prompt $"\ {pass "step over breakpoint"} timeout {fail "(timeout) step over breakpoint"}}send_gdb "clear 81\n"gdb_expect { -re "No breakpoint at 81..*$gdb_prompt $"\ {pass "clear line has no breakpoint disallowed"} -re "$gdb_prompt $"\ {fail "clear line has no breakpoint disallowed"} timeout {fail "(timeout) clear line has no breakpoint disallowed"}}send_gdb "clear\n"gdb_expect { -re "No breakpoint at this line..*$gdb_prompt $"\ {pass "clear current line has no breakpoint disallowed"} -re "$gdb_prompt $"\ {fail "clear current line has no breakpoint disallowed"} timeout {fail "(timeout) clear current line has no breakpoint disallowed"}}# Verify that we can set and clear multiple breakpoints.## We don't test that it deletes the correct breakpoints. We do at# least test that it deletes more than one breakpoint.#gdb_test "break marker3" "Breakpoint.*at.*" "break marker3 #1"gdb_test "break marker3" "Breakpoint.*at.*" "break marker3 #2"gdb_test "clear marker3" {Deleted breakpoints [0-9]+ [0-9]+.*}# Verify that a breakpoint can be set via a convenience variable.#send_gdb "set \$foo=$bp_location11\n"gdb_expect { -re "$gdb_prompt $"\ {pass "set convenience variable \$foo to bp_location11"} timeout {fail "(timeout) set convenience variable \$foo to bp_location11"}}send_gdb "break \$foo\n"gdb_expect { -re "Breakpoint (\[0-9\]*) at .*, line $bp_location11.*$gdb_prompt $"\ {pass "set breakpoint via convenience variable"} -re "$gdb_prompt $"\ {fail "set breakpoint via convenience variable"} timeout {fail "(timeout) set breakpoint via convenience variable"}}# Verify that GDB responds gracefully to an attempt to set a# breakpoint via a convenience variable whose type is not integer.#send_gdb "set \$foo=81.5\n"gdb_expect { -re "$gdb_prompt $"\ {pass "set convenience variable \$foo to 81.5"} timeout {fail "(timeout) set convenience variable \$foo to 81.5"}}send_gdb "break \$foo\n"gdb_expect { -re "Convenience variables used in line specs must have integer values..*$gdb_prompt $"\ {pass "set breakpoint via non-integer convenience variable disallowed"} -re "$gdb_prompt $"\ {fail "set breakpoint via non-integer convenience variable disallowed"} timeout {fail "(timeout) set breakpoint via non-integer convenience variable disallowed"}}# Verify that we can set and trigger a breakpoint in a user-called function.#send_gdb "break marker2\n"gdb_expect { -re "Breakpoint (\[0-9\]*) at .*, line ($bp_location8|$bp_location9).*$gdb_prompt $"\ {pass "set breakpoint on to-be-called function"} -re "$gdb_prompt $"\ {fail "set breakpoint on to-be-called function"} timeout {fail "(timeout) set breakpoint on to-be-called function"}}send_gdb "print marker2(99)\n"gdb_expect { -re "The program being debugged stopped while in a function called from GDB.\r\nWhen the function .marker2. is done executing, GDB will silently\r\nstop .instead of continuing to evaluate the expression containing\r\nthe function call...*$gdb_prompt $"\ {pass "hit breakpoint on called function"} -re "$gdb_prompt $"\ {fail "hit breakpoint on called function"} timeout {fail "(timeout) hit breakpoint on called function"}}# As long as we're stopped (breakpointed) in a called function,# verify that we can successfully backtrace & such from here.## In this and the following test, the _sr4export check apparently is needed# for hppa*-*-hpux.#send_gdb "bt\n"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -