This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[commit/testsuite] Handle some failure modes better


As you can guess, I'm updating and merging support for using GDB to
debug code compiled by ARM RealView.  Right now, a lot of C++ tests
fail; the patches Keith Seitz is submitting independently will fix
many of those failures.  Until that point, I'll just ignore them by
running before-and-after comparisons.  But that makes the tests which
fail by timing out particularly painful.

One of them (userdef.exp) I can't do much about.  GDB calls the wrong
"operator<<", and wanders off into an infinite loop, so all the
following tests in that file time out.  But the other sources of
timeouts are the "y or [n]" prompt for setting a breakpoint on an
unknown method and the "[0] cancel [1] all" style menus used to select
an overridden function.  This patch makes gdb_test and
gdb_test_multiple escape those situations gracefully, and makes
several C++ tests using send_gdb / gdb_expect use gdb_test /
gdb_test_multiple instead.

After consideration, I've also removed the perror "Got interactive
prompt" in favor of a note in the failure message, as done elsewhere
in our testsuite.

Tested on arm-none-eabi and x86_64-linux.  Checked in.

2009-11-12  Daniel Jacobowitz  <dan@codesourcery.com>

	gdb/testsuite/
	* lib/gdb.exp (gdb_test_multiple): Handle "y or [n]", "[y] or n",
	and the breakpoint menu.  Do not call perror if a prompt is seen.
	Consume the following GDB prompt.
	* gdb.cp/method2.exp (test_break): Use gdb_test_multiple.
	* gdb.cp/namespace.exp: Use gdb_test.
	* gdb.cp/templates.exp: Use gdb_test.
	(test_template_breakpoints): Use gdb_test_multiple.

---
 gdb/testsuite/gdb.cp/method2.exp   |    5 +----
 gdb/testsuite/gdb.cp/namespace.exp |   30 ++++++------------------------
 gdb/testsuite/gdb.cp/templates.exp |   13 +++----------
 gdb/testsuite/lib/gdb.exp          |   12 +++++++++---
 4 files changed, 19 insertions(+), 41 deletions(-)

Index: gdb-mainline/gdb/testsuite/lib/gdb.exp
===================================================================
--- gdb-mainline.orig/gdb/testsuite/lib/gdb.exp	2009-11-02 09:43:12.000000000 -0800
+++ gdb-mainline/gdb/testsuite/lib/gdb.exp	2009-11-12 06:36:05.000000000 -0800
@@ -769,10 +769,16 @@ proc gdb_test_multiple { command message
             fail "$message"
 	    set result -1
 	}
-	 -re "\\(y or n\\) " {
+	-re "\\((y or n|y or \\\[n\\\]|\\\[y\\\] or n)\\) " {
 	    send_gdb "n\n"
-	    perror "Got interactive prompt."
-            fail "$message"
+	    gdb_expect -re "$gdb_prompt $"
+	    fail "$message (got interactive prompt)"
+	    set result -1
+	}
+	-re "\\\[0\\\] cancel\r\n\\\[1\\\] all.*\r\n> $" {
+	    send_gdb "0\n"
+	    gdb_expect -re "$gdb_prompt $"
+	    fail "$message (got breakpoint menu)"
 	    set result -1
 	}
 	 eof {
Index: gdb-mainline/gdb/testsuite/gdb.cp/method2.exp
===================================================================
--- gdb-mainline.orig/gdb/testsuite/gdb.cp/method2.exp	2009-01-03 00:43:31.000000000 -0800
+++ gdb-mainline/gdb/testsuite/gdb.cp/method2.exp	2009-11-12 06:37:47.000000000 -0800
@@ -50,15 +50,12 @@ proc test_break { lang } {
 	"" \
 	"setting language $lang"
 
-    send_gdb "break A::method\n"
-    gdb_expect {
+    gdb_test_multiple "break A::method" "breaking in method ($lang)" {
 	-re ".0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. A::method\\(A\\*\\) at .*\[\r\n\]*.3. A::method\\(int\\) at .*\[\r\n\]*\[\r\n\]*.4. A::method\\(\\) at .*\[\r\n\]*> $" {
 	    gdb_test "0" \
 		"canceled" \
 		"breaking in method ($lang)"
 	}
-	-re ".*$gdb_prompt $" { fail "breaking in method ($lang)" }
-	default { fail "breaking in method ($lang) (timeout)" }
     }
 }
 
Index: gdb-mainline/gdb/testsuite/gdb.cp/namespace.exp
===================================================================
--- gdb-mainline.orig/gdb/testsuite/gdb.cp/namespace.exp	2009-01-03 00:43:31.000000000 -0800
+++ gdb-mainline/gdb/testsuite/gdb.cp/namespace.exp	2009-11-12 06:40:02.000000000 -0800
@@ -163,14 +163,8 @@ gdb_expect {
        
 # Break on a function in a namespace
 
-send_gdb "break AAA::xyzq\n"
-gdb_expect {
-    -re "Breakpoint.*at $hex: file.*namespace.cc, line 42\\.\r\n$gdb_prompt $" {
-         pass "break AAA::xyzq"
-    }    
-   -re ".*$gdb_prompt $" { fail "break AAA::xyzq" }
-   timeout { fail "(timeout) break AAA::xyzq" }
-}
+gdb_test "break AAA::xyzq" \
+    "Breakpoint.*at $hex: file.*namespace.cc, line 42\\."
 
 # Call a function in a nested namespace
 
@@ -194,14 +188,8 @@ gdb_expect {
        
 # Break on a function in a nested namespace
 
-send_gdb "break BBB::CCC::xyzq\n"
-gdb_expect {
-    -re "Breakpoint.*at $hex: file.*namespace.cc, line 58\\.\r\n$gdb_prompt $" {
-         pass "break BBB::CCC::xyzq"
-    }    
-   -re ".*$gdb_prompt $" { fail "break BBB::CCC::xyzq" }
-   timeout { fail "(timeout) break BBB::CCC::xyzq" }
-}
+gdb_test "break BBB::CCC::xyzq" \
+    "Breakpoint.*at $hex: file.*namespace.cc, line 58\\."
 
 # Print address of a function in a class in a namespace
 
@@ -225,14 +213,8 @@ gdb_expect {
 
 # Break on a function in a class in a namespace
 
-send_gdb "break BBB::Class::xyzq\n"
-gdb_expect {
-    -re "Breakpoint.*at $hex: file.*namespace.cc, line 63\\.\r\n$gdb_prompt $" {
-         pass "break BBB::Class::xyzq"
-    }    
-   -re ".*$gdb_prompt $" { fail "break BBB::Class::xyzq" }
-   timeout { fail "(timeout) break BBB::Class::xyzq" }
-}
+gdb_test "break BBB::Class::xyzq" \
+    "Breakpoint.*at $hex: file.*namespace.cc, line 63\\."
 
 # Test to see if the appropriate namespaces are in scope when trying
 # to print out stuff from within a function defined within a
Index: gdb-mainline/gdb/testsuite/gdb.cp/templates.exp
===================================================================
--- gdb-mainline.orig/gdb/testsuite/gdb.cp/templates.exp	2009-09-22 00:29:05.000000000 -0700
+++ gdb-mainline/gdb/testsuite/gdb.cp/templates.exp	2009-11-12 06:41:45.000000000 -0800
@@ -112,8 +112,7 @@ proc test_template_breakpoints {} {
     global srcdir
     global hp_aCC_compiler
 
-    send_gdb "break T5<int>::T5\n"
-    gdb_expect {
+    gdb_test_multiple "break T5<int>::T5" "constructor breakpoint" {
 	-re "0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. T5<int>::T5\\(int\\) at .*\[\r\n\]*.3. T5<int>::T5\\((T5<int> const|const T5<int>) ?&\\) at .*\[\r\n\]*> $" {
 	    gdb_test "0" \
 		"canceled" \
@@ -135,8 +134,6 @@ proc test_template_breakpoints {} {
 		    "nonsense intended to insure that this test fails" \
 		    "constructor breakpoint (bad menu choices)"
 	}
-	-re ".*$gdb_prompt $" { fail "constructor breakpoint" }
-	default { fail "constructor breakpoint (timeout)" }
     }
     
 # See CLLbs14792
@@ -546,9 +543,5 @@ gdb_expect {
 
 # djb - 06-03-2000
 # Now should work fine
-send_gdb "break Garply<Garply<char> >::garply\n"
-gdb_expect {
-   -re "Breakpoint \[0-9\]* at $hex: file .*templates.cc, line.*\r\n$gdb_prompt $" { pass "break Garply<Garply<char> >::garply" }
-   -re ".*$gdb_prompt $" { fail "break Garply<Garply<char> >::garply" }
-   timeout { fail "break Garply<Garply<char> >::garply (timeout)" }
-}
+gdb_test "break Garply<Garply<char> >::garply" \
+    "Breakpoint \[0-9\]* at $hex: file .*templates.cc, line.*"

-- 
Daniel Jacobowitz
CodeSourcery


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]