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]

Re: MI testsuite to use PTY for inferior


On Mon, Aug 29, 2005 at 10:52:03PM -0400, Daniel Jacobowitz wrote:
> On Fri, Aug 19, 2005 at 06:27:21PM -0400, Bob Rossi wrote:
> > > Funny thing is that if I run mi-console.exp alone, it usually
> > > (although not always) succeeds.
> > > 
> > > Attached are a gdb.log for a failing run and a passing run.
> > 
> > OK, I've tracked down why mi-console.exp breaks. Also, I can reproduce
> > it. The problem is slightly difficult to fix because of race conditions
> > so I was hoping to get some advice from people who might have had
> > similar experience with the testsuite.
> 
> Nice job tracking this down.

Hi Daniel,

The solution you sent in gave me an idea that might work out. It's
pretty simple. First look at the patch with it's comment,

Index: gdb/testsuite/ChangeLog
+	* lib/mi-support.exp (mi_gdb_test): Change -re to not be anchored.

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	1 Sep 2005 00:46:01 -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"
 	    }

Basically, this passes the mi-console.exp testcase if the 'sleep 1' is
there or not. Also, it didn't break any testcases. It changes
mi_gdb_test to enforce the fact that only a single MI output command can
be matched. What do you think?

Thanks,
Bob Rossi


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