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]

[pushed] delete_breakpoints: Rewrite using gdb_test_multiple


Because delete_breakpoints uses gdb_expect directly, an internal error
results in slow timeouts instead of quickly bailing out.  This patch
rewrites the procedure to use gdb_test_multiple instead, while
preserving the existing general logic ("delete breakpoints" + "info
breakpoints").

gdb/testsuite/
2015-02-23  Pedro Alves  <palves@redhat.com>

	* lib/gdb.exp (delete_breakpoints): Rewrite using
	gdb_test_multiple.
---
 gdb/testsuite/ChangeLog   |  5 +++++
 gdb/testsuite/lib/gdb.exp | 38 ++++++++++++++++++++++++--------------
 2 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 276749e..87f6c98 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,10 @@
 2015-02-23  Pedro Alves  <palves@redhat.com>
 
+	* lib/gdb.exp (delete_breakpoints): Rewrite using
+	gdb_test_multiple.
+
+2015-02-23  Pedro Alves  <palves@redhat.com>
+
 	* gdb.base/info-os.c: Include stdlib.h.
 
 2015-02-22  Doug Evans  <xdje42@gmail.com>
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index bbc657c..08db806 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -181,25 +181,35 @@ proc delete_breakpoints {} {
     # we need a larger timeout value here or this thing just confuses
     # itself.  May need a better implementation if possible. - guo
     #
-    send_gdb "delete breakpoints\n"
-    gdb_expect 100 {
-	 -re "Delete all breakpoints.*y or n.*$" {
+    set timeout 100
+
+    set msg "delete all breakpoints in delete_breakpoints"
+    set deleted 0
+    gdb_test_multiple "delete breakpoints" "$msg" {
+	-re "Delete all breakpoints.*y or n.*$" {
 	    send_gdb "y\n"
 	    exp_continue
 	}
-	 -re "$gdb_prompt $" { # This happens if there were no breakpoints
-	    }
-	 timeout { perror "Delete all breakpoints in delete_breakpoints (timeout)" ; return }
+	-re "$gdb_prompt $" {
+	    set deleted 1
+	}
     }
-    send_gdb "info breakpoints\n"
-    gdb_expect 100 {
-	 -re "No breakpoints or watchpoints..*$gdb_prompt $" {}
-	 -re "$gdb_prompt $" { perror "breakpoints not deleted" ; return }
-	 -re "Delete all breakpoints.*or n.*$" {
-	    send_gdb "y\n"
-	    exp_continue
+
+    if {$deleted} {
+	# Confirm with "info breakpoints".
+	set deleted 0
+	set msg "info breakpoints"
+	gdb_test_multiple $msg $msg {
+	    -re "No breakpoints or watchpoints..*$gdb_prompt $" {
+		set deleted 1
+	    }
+	    -re "$gdb_prompt $" {
+	    }
 	}
-	 timeout { perror "info breakpoints (timeout)" ; return }
+    }
+
+    if {!$deleted} {
+	perror "breakpoints not deleted"
     }
 }
 
-- 
1.9.3


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