diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/skip.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/skip.exp | 207 |
1 files changed, 160 insertions, 47 deletions
diff --git a/gdb/testsuite/gdb.base/skip.exp b/gdb/testsuite/gdb.base/skip.exp index 40f3103..7d28b8b 100644 --- a/gdb/testsuite/gdb.base/skip.exp +++ b/gdb/testsuite/gdb.base/skip.exp @@ -14,6 +14,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # This file was written by Justin Lebar. (justin.lebar@gmail.com) +# And further hacked on by Doug Evans. (dje@google.com) if { [prepare_for_testing skip.exp "skip" \ {skip.c skip1.c } \ @@ -30,7 +31,24 @@ gdb_test "skip file" "No default file now." "skip file (no default file)" gdb_test "skip function" "No default function now." gdb_test "skip" "No default function now." "skip (no default function)" -if ![runto_main] { fail "skip tests suppressed" } +# Test elided args. + +gdb_test "skip -fi" "Missing value for -fi option." +gdb_test "skip -file" "Missing value for -file option." +gdb_test "skip -fu" "Missing value for -fu option." +gdb_test "skip -function" "Missing value for -function option." +gdb_test "skip -rfu" "Missing value for -rfu option." +gdb_test "skip -rfunction" "Missing value for -rfunction option." + +# Test other invalid option combinations. + +gdb_test "skip -x" "Invalid skip option: -x" +gdb_test "skip -rfu foo.* xyzzy" "Invalid argument: xyzzy" + +if ![runto_main] { + fail "Can't run to main" + return +} # Test |info skip| with an empty skiplist. @@ -62,34 +80,39 @@ gdb_test "info skip 999" "No skiplist entries found with number 999." # Does |info skip| look right? gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -1\\s+file\\s+y\\s+.*$srcfile\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+y\\s+baz\\s*" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +1\\s+y\\s+n\\s+.*$srcfile\\s+n\\s+<none>\\s* +2\\s+y\\s+n\\s+<none>\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s* +4\\s+y\\s+n\\s+<none>\\s+n\\s+baz\\s*" # Right now, we have an outstanding skiplist entry on both source # files, so when we step into the first line in main(), we should step # right over it and go to the second line of main(). -if ![runto_main] { fail "skip tests suppressed" } +if ![runto_main] { + fail "Can't run to main" + return +} gdb_test "step" ".*" "step in the main" gdb_test "bt" "\\s*\\#0\\s+main.*" "step after all ignored" # Now remove skip.c from the skiplist. Our first step should take us -# into foo(), and our second step should take us to the next line in -# main(). +# into foo(), and our second step should take us to the next line in main(). gdb_test "skip delete 1" # Check that entry 1 is missing from |info skip| gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+y\\s+baz\\s*" \ + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+<none>\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s* +4\\s+y\\s+n\\s+<none>\\s+n\\s+baz\\s*" \ "info skip (delete 1)" -if ![runto_main] { fail "skip tests suppressed" } +if ![runto_main] { + fail "Can't run to main" + return +} set test "step after deleting 1" gdb_test "step" "foo \\(\\) at.*" "$test (1)" gdb_test "step" ".*" "$test (2)" ; # Return from foo() @@ -100,10 +123,14 @@ gdb_test "step" "main \\(\\) at.*" "$test (3)" gdb_test "skip disable 3" # Is entry 3 disabled in |info skip|? -gdb_test "info skip 3" ".*\\n3\\s+file\\s+n.*" \ - "info skip shows entry as disabled" +gdb_test "info skip 3" \ + "3\\s+n\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s*" \ + "info skip shows entry as disabled" -if ![runto_main] { fail "skip tests suppressed" } +if ![runto_main] { + fail "Can't run to main" + return +} set test "step after disabling 3" gdb_test "step" "bar \\(\\) at.*" "$test (1)" gdb_test "step" ".*" "$test (2)"; # Return from foo() @@ -115,9 +142,13 @@ gdb_test "step" "main \\(\\) at.*" "$test (5)" gdb_test "skip enable 3" # Is entry 3 enabled in |info skip|? -gdb_test "info skip 3" ".*\\n3\\s+file\\s+y.*" \ - "info skip shows entry as enabled" -if ![runto_main] { fail "skip tests suppressed" } +gdb_test "info skip 3" \ + "3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s*" \ + "info skip shows entry as enabled" +if ![runto_main] { + fail "Can't run to main" + return +} set test "step after enable 3" gdb_test "step" "foo \\(\\) at.*" "$test (1)" gdb_test "step" ".*" "$test (2)"; # Return from foo() @@ -125,47 +156,129 @@ gdb_test "step" "main \\(\\) at.*" "$test (3)" gdb_test "skip disable" gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+n\\s+main\\s* -3\\s+file\\s+n\\s+$srcfile1\\s* -4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after disabling all" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+n\\s+n\\s+<none>\\s+n\\s+main\\s* +3\\s+n\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s* +4\\s+n\\s+n\\s+<none>\\s+n\\s+baz\\s*" \ + "info skip after disabling all" gdb_test "skip enable" gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+y\\s+baz\\s*" \ - "info skip after enabling all" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+<none>\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s* +4\\s+y\\s+n\\s+<none>\\s+n\\s+baz\\s*" \ + "info skip after enabling all" gdb_test "skip disable 4 2-3" gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+n\\s+main\\s* -3\\s+file\\s+n\\s+$srcfile1\\s* -4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after disabling 4 2-3" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+n\\s+n\\s+<none>\\s+n\\s+main\\s* +3\\s+n\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s* +4\\s+n\\s+n\\s+<none>\\s+n\\s+baz\\s*" \ + "info skip after disabling 4 2-3" gdb_test "skip enable 2-3" gdb_test "info skip" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s* -4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after enabling 2-3" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+<none>\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s* +4\\s+n\\s+n\\s+<none>\\s+n\\s+baz\\s*" \ + "info skip after enabling 2-3" gdb_test "info skip 2-3" \ - "Num\\s+Type\\s+Enb\\s+What\\s* -2\\s+function\\s+y\\s+main\\s* -3\\s+file\\s+y\\s+$srcfile1\\s*" \ - "info skip 2-3" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +2\\s+y\\s+n\\s+<none>\\s+n\\s+main\\s* +3\\s+y\\s+n\\s+$srcfile1\\s+n\\s+<none>\\s*" \ + "info skip 2-3" gdb_test "skip delete 2 3" gdb_test "info skip" \ - "4\\s+function\\s+n\\s+baz\\s*" \ - "info skip after deleting 2 3" + "Num\\s+Enb\\s+Glob\\s+File\\s+RE\\s+Function\\s* +4\\s+n\\s+n\\s+<none>\\s+n\\s+baz\\s*" \ + "info skip after deleting 2 3" gdb_test "skip delete" gdb_test "info skip" "Not skipping any files or functions\." \ - "info skip after deleting all" + "info skip after deleting all" + +# Now test skip -fi, etc. + +# Create a skiplist entry for a specified file and function. +gdb_test "skip -fi skip1.c" "File .*$srcfile1 will be skipped when stepping\." +gdb_test "skip -gfi sk*1.c" "File\\(s\\) sk\\*1.c will be skipped when stepping\." +gdb_test "skip -fu baz" "Function baz will be skipped when stepping\." +gdb_test "skip -rfu ^b.z$" "Function\\(s\\) \\^b\\.z\\$ will be skipped when stepping." + +if ![runto_main] { + fail "Can't run to main" + return +} + +set test "step using -fi" +gdb_test_no_output "skip disable" +gdb_test_no_output "skip enable 5" +gdb_test "step" "foo \\(\\) at.*" "$test (1)" +gdb_test "step" ".*" "$test (2)"; # Return from foo() +gdb_test "step" "main \\(\\) at.*" "$test (3)" + +if ![runto_main] { + fail "Can't run to main" + return +} + +set test "step using -gfi" +gdb_test_no_output "skip disable" +gdb_test_no_output "skip enable 6" +gdb_test "step" "foo \\(\\) at.*" "$test (1)" +gdb_test "step" ".*" "$test (2)"; # Return from foo() +gdb_test "step" "main \\(\\) at.*" "$test (3)" + +if ![runto_main] { + fail "Can't run to main" + return +} + +set test "step using -fu for baz" +gdb_test_no_output "skip disable" +gdb_test_no_output "skip enable 7" +gdb_test "step" "bar \\(\\) at.*" "$test (1)" +gdb_test "step" ".*" "$test (2)"; # Return from bar() +gdb_test "step" "foo \\(\\) at.*" "$test (3)" +gdb_test "step" ".*" "$test (4)"; # Return from foo() +gdb_test "step" "main \\(\\) at.*" "$test (5)" + +if ![runto_main] { + fail "Can't run to main" + return +} + +set test "step using -rfu for baz" +gdb_test_no_output "skip disable" +gdb_test_no_output "skip enable 8" +gdb_test "step" "bar \\(\\) at.*" "$test (1)" +gdb_test "step" ".*" "$test (2)"; # Return from bar() +gdb_test "step" "foo \\(\\) at.*" "$test (3)" +gdb_test "step" ".*" "$test (4)"; # Return from foo() +gdb_test "step" "main \\(\\) at.*" "$test (5)" + +# Test -fi + -fu. + +if ![runto_main] { + fail "Can't run to main" + return +} + +set test "step using -fi + -fu" +gdb_test_no_output "skip delete" +gdb_test "skip -fi skip1.c -fu test_skip" \ + "Function test_skip in file skip1.c will be skipped when stepping\." +gdb_breakpoint "test_skip_file_and_function" +gdb_breakpoint "end_test_skip_file_and_function" +gdb_test "call test_skip_file_and_function ()" "silently stop." +# Verify we can step into skip.c:test_skip but not skip1.c:test_skip. +gdb_test "step" "test_skip \\(\\) at.*" "$test (1)" +gdb_test "step" "test_skip_file_and_function \\(\\) at.*" "$test (2)"; # Return from test_skip() +gdb_test "step" "skip1_test_skip_file_and_function \\(\\) at.*" "$test (4)" +gdb_test "step" ".*" "$test (5)"; # Skip over test_skip() +gdb_test "step" "test_skip_file_and_function \\(\\) at.*" "$test (6)"; # Return from skip1_test_skip_file_and_function() |