Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Bob Rossi <bob@brasko.net>
To: Mark Kettenis <mark.kettenis@xs4all.nl>
Cc: gdb-patches@sources.redhat.com, Daniel Jacobowitz <drow@false.org>
Subject: Re: MI testsuite to use PTY for inferior
Date: Mon, 05 Sep 2005 19:52:00 -0000	[thread overview]
Message-ID: <20050905195147.GA20894@white> (raw)
In-Reply-To: <200509012211.j81MBfX1004484@elgar.sibelius.xs4all.nl>

> Fixes the problems in mi-console.exp, but I still see the following:
> 
> 403-exec-continue
> 403^running
> (gdb) 
> FAIL: gdb.mi/mi-syn-frame.exp: testing exec continue
> 403*stopped
> (gdb) 
> 404-stack-list-frames 0 0
> 404^done,stack=[frame={level="0",addr="0x1c0006c8",func="main",file="../../../..
> /src/gdb/gdb/testsuite/gdb.mi/mi-syn-frame.c",fullname="/home/kettenis/src/gdb/g
> db/testsuite/gdb.mi/mi-syn-frame.c",line="14"}]
> (gdb) 
> PASS: gdb.mi/mi-syn-frame.exp: list stack frames

OK, I think I finally have a solution that will scale nicely to other
problems that pop up like this. The previous patch I posted is reposted
here, along with a patch that fixes the mi-syn-frame.exp testcase.

For an MI input command that can generate more than 1 MI output command
(the normal MI output command response + at least 1 asynchronous MI
output command), we can simply call mi_gdb_test multiple times, each
with an MI output command to match. Here's an example,

   mi_gdb_test "47-exec-next" \
               "47\\^running" \
               "Testing console output" \
               "Hello \\\\\"!\[\r\n\]+"

   mi_gdb_test "" "47\\*stopped.*" "Finished step over hello"

When the first parameter is "", mi_gdb_test still matches the MI output
command, even though no new data is sent to GDB.

The attached patch solves the current issues found by Mark and I.
What do you think?

Thanks,
Bob Rossi

Index: gdb/testsuite/ChangeLog
2005-08-31  Bob Rossi  <bob@brasko.net>
+
+	* lib/mi-support.exp (mi_gdb_test): Change -re to not be anchored.
+	* gdb.mi/mi-syn-frame.exp: Call mi_gdb_test twice instead of once for 
+	commands that return an MI output command and an asyncronous MI output
+	command. This avoids race conditions.
+	* gdb.mi/mi-console.exp: Ditto.

Index: gdb/testsuite/gdb.mi/mi-console.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-console.exp,v
retrieving revision 1.15
diff -u -r1.15 mi-console.exp
--- gdb/testsuite/gdb.mi/mi-console.exp	4 Aug 2005 01:52:31 -0000	1.15
+++ gdb/testsuite/gdb.mi/mi-console.exp	5 Sep 2005 19:43:55 -0000
@@ -58,15 +58,8 @@
 	    "47\\^running" \
 	    "Testing console output" \
 	    "Hello \\\\\"!\[\r\n\]+"
-    
-gdb_expect {
-    -re "47\\*stopped.*$mi_gdb_prompt$" {
-	pass "Finished step over hello"
-    }
-    timeout {
-	fail "Finished step over hello (timeout)"
-    }
-}
 
+mi_gdb_test "" "47\\*stopped.*" "Finished step over hello"
+    
 mi_gdb_exit
 return 0
Index: gdb/testsuite/gdb.mi/mi-syn-frame.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-syn-frame.exp,v
retrieving revision 1.6
diff -u -r1.6 mi-syn-frame.exp
--- gdb/testsuite/gdb.mi/mi-syn-frame.exp	4 Aug 2005 01:52:31 -0000	1.6
+++ gdb/testsuite/gdb.mi/mi-syn-frame.exp	5 Sep 2005 19:43:55 -0000
@@ -35,8 +35,6 @@
      gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
 }
 
-set my_mi_gdb_prompt "\\(gdb\\)\[ \]*\[\r\n\]*"
-
 mi_gdb_exit
 mi_gdb_start separate-inferior-tty
 mi_delete_breakpoints
@@ -61,10 +59,12 @@
 # Continue back to main()
 #
 mi_gdb_test "403-exec-continue" \
-  "403\\^running\[\r\n\]+${my_mi_gdb_prompt}403\\\*stopped" \
+  "403\\^running" \
   "testing exec continue" \
   "hi in foo\[\r\n\]\+"
 
+mi_gdb_test "" "403\\*stopped" "finished exec continue"
+
 mi_gdb_test "404-stack-list-frames 0 0" \
   "404\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\}.*\\\]" \
   "list stack frames"
@@ -91,8 +91,9 @@
   "list stack frames"
 
 
-mi_gdb_test "408-exec-continue" \
-  "408\\^running\[\r\n\]+${my_mi_gdb_prompt}408\\\*stopped"
+mi_gdb_test "408-exec-continue" "408\\^running"
+
+mi_gdb_test "" "408\\*stopped.*" "finished exec continue"
 
 mi_gdb_test "409-stack-list-frames 0 0" \
   "409\\^done,stack=\\\[frame=\{level=\"0\",addr=\"$hex\",func=\"main\",file=\".*mi-syn-frame.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$decimal\"\}.*\\\]" \
Index: gdb/testsuite/lib/mi-support.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/mi-support.exp,v
retrieving revision 1.30
diff -u -r1.30 mi-support.exp
--- gdb/testsuite/lib/mi-support.exp	9 Aug 2005 19:00:16 -0000	1.30
+++ gdb/testsuite/lib/mi-support.exp	5 Sep 2005 19:43:55 -0000
@@ -659,7 +659,15 @@
 	    gdb_start
 	    set result -1
 	}
-	 -re "\[\r\n\]*($pattern)\[\r\n\]+$mi_gdb_prompt\[ \]*$" {
+	 -re "\[\r\n\]*($pattern)\[\r\n\]+$mi_gdb_prompt\[ \]*" {
+	    # NOTE, there is no trailing anchor because with GDB/MI, 
+	    # asynchronous responses can happen at any point, causing more 
+	    # data to be available.  Normally an anchor is used to make 
+	    # sure the end of the output is matched, however, $mi_gdb_prompt 
+	    # is just as good of an anchor since mi_gdb_test is meant to 
+	    # match a single mi output command. If a second GDB/MI output 
+	    # response is sent, it will be in the buffer for the next 
+	    # time mi_gdb_test is called.
 	    if ![string match "" $message] then {
 		pass "$message"
 	    }


  parent reply	other threads:[~2005-09-05 19:52 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-27  3:18 Bob Rossi
2005-08-13 22:04 ` Mark Kettenis
2005-08-20  9:07   ` Bob Rossi
2005-08-30  2:55     ` Daniel Jacobowitz
2005-09-01  0:52       ` Bob Rossi
2005-09-01 22:12         ` Mark Kettenis
2005-09-01 23:52           ` Bob Rossi
2005-09-05 19:52           ` Bob Rossi [this message]
2005-09-10  4:02             ` Daniel Jacobowitz
2005-07-30  5:54 Nick Roberts
2005-07-30 17:39 ` Bob Rossi
2005-07-30 18:08   ` Daniel Jacobowitz
2005-07-30 22:47     ` Nick Roberts
2005-07-31  1:19       ` Daniel Jacobowitz
2005-07-30 22:47   ` Nick Roberts
2005-07-30 23:03     ` Bob Rossi
2005-07-31  1:21       ` Daniel Jacobowitz
2005-07-31 13:16         ` Bob Rossi
2005-07-31 15:31           ` Daniel Jacobowitz
2005-07-31 21:20             ` Bob Rossi
2005-08-01  1:53               ` Daniel Jacobowitz
2005-08-01  2:05                 ` Bob Rossi
2005-08-01  2:15                   ` Daniel Jacobowitz
2005-08-01 11:32                     ` Bob Rossi
2005-08-01  3:56               ` Eli Zaretskii
2005-08-01 11:30                 ` Bob Rossi
2005-08-01 13:00                   ` Daniel Jacobowitz
2005-08-01 13:16                     ` Bob Rossi
2005-08-01 13:23                       ` Daniel Jacobowitz
2005-08-01 13:31                         ` Bob Rossi
2005-08-01 14:00                           ` Daniel Jacobowitz
2005-08-01 14:07                             ` Bob Rossi
2005-08-01 18:45                   ` Eli Zaretskii
2005-08-01 19:01                     ` Mark Kettenis
2005-08-01 19:25                       ` Daniel Jacobowitz
2005-08-01 19:34                         ` Mark Kettenis
2005-08-01 19:43                           ` Bob Rossi
2005-08-01 20:48                         ` Eli Zaretskii
2005-08-01 20:45                       ` Eli Zaretskii
2005-08-01 20:52                         ` Daniel Jacobowitz
2005-08-02  3:45                           ` Eli Zaretskii
2005-08-02  3:50                             ` Daniel Jacobowitz
2005-08-02 20:46                               ` Eli Zaretskii
2005-08-02 20:48                                 ` Daniel Jacobowitz
2005-08-13 17:26                                   ` Bob Rossi
2005-08-13 21:41                                     ` Daniel Jacobowitz
2005-07-31 21:35           ` Nick Roberts
2005-07-31 21:37             ` Daniel Jacobowitz
2005-07-31 23:32               ` Nick Roberts
2005-08-01  1:51                 ` Daniel Jacobowitz
2005-08-03  2:07         ` Bob Rossi
2005-08-03 12:48           ` Bob Rossi
2005-08-03 13:19           ` Daniel Jacobowitz
2005-08-03 18:22             ` Bob Rossi
2005-08-03 18:23               ` Daniel Jacobowitz
2005-08-03 18:24               ` Bob Rossi
2005-08-03 18:32                 ` Daniel Jacobowitz
2005-08-03 19:31                   ` Bob Rossi
2005-08-04  2:23                     ` Bob Rossi
2005-08-04  2:27                       ` Bob Rossi
2005-08-04  4:05                         ` Daniel Jacobowitz
2005-08-04 13:07                           ` Bob Rossi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050905195147.GA20894@white \
    --to=bob@brasko.net \
    --cc=drow@false.org \
    --cc=gdb-patches@sources.redhat.com \
    --cc=mark.kettenis@xs4all.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox