From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12490 invoked by alias); 31 Jan 2005 21:10:55 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 11954 invoked from network); 31 Jan 2005 21:10:42 -0000 Received: from unknown (HELO lakermmtao11.cox.net) (68.230.240.28) by sourceware.org with SMTP; 31 Jan 2005 21:10:42 -0000 Received: from white ([68.9.64.121]) by lakermmtao11.cox.net (InterMail vM.6.01.04.00 201-2131-117-20041022) with ESMTP id <20050131211041.HOJH15343.lakermmtao11.cox.net@white>; Mon, 31 Jan 2005 16:10:41 -0500 Received: from bob by white with local (Exim 3.35 #1 (Debian)) id 1Cviok-0002GC-00; Mon, 31 Jan 2005 16:10:42 -0500 Date: Mon, 31 Jan 2005 21:10:00 -0000 From: Bob Rossi To: Paul Hilfinger , GDB Subject: Re: How do I get regexp from expect at gdb_expect? Message-ID: <20050131211042.GA8411@white> Mail-Followup-To: Paul Hilfinger , GDB References: <20050129025743.GA4053@white> <200501290309.j0T39F1i020834@tully.CS.Berkeley.EDU> <20050131150652.GA7955@white> <20050131162609.GA19459@nevyn.them.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050131162609.GA19459@nevyn.them.org> User-Agent: Mutt/1.3.28i X-SW-Source: 2005-01/txt/msg00167.txt.bz2 > You've left out your pattern, and the context. I recommend using > "exp_internal 1" to debug this sort of problem; that will show you what > expect is doing. OK, here's an example of the problem, here's the output for 2 consecutive commands given to GDB. First, 200-break-delete is sent. The '200-break-delete' is in the 'expect_out(buffer)' output, which leads me to believe the testsuite is echoing the input command. This in itself is probably wrong. However, the '200-break-delete' is not in the matched regular expression 'expect_out(0,string)'. The next command, '200-break-list' is in both the 'expect_out(buffer)' and in the 'expect_out(0,string)'. This leads me to believe that there is something wrong with the regular expression matching. It can match things that it shouldn't, which could mask problems. I don't really understand what you are saying about 'GDB is echoing commands'. I do understand that when you are at the terminal running GDB, GDB allows the terminal to 'echo' the char's typed. However, if you fork/exec GDB, and send it a command, it will not 'echo' the data back to your process. Isn't this the way Expect works? The output is below. Thanks, Bob Rossi send: sending "200-break-delete\n" to { exp11 } expect: does "" (spawn_id exp11) match regular expression "\*\*\* DOSEXIT code.*"? no "Ending remote debugging.*[(]gdb[)] \r\n[ ]*$"? no "([\r\n]*((\^done)[\r\n]+[(]gdb[)] \r\n[ ]*$))"? no "(^FOOBAR$)$"? no "Undefined.* command:.*[(]gdb[)] \r\n[ ]*$"? no "Ambiguous command.*[(]gdb[)] \r\n[ ]*$"? no "Program exited with code [0-9]+.*[(]gdb[)] \r\n[ ]*$"? no "The program is not being run.*[(]gdb[)] \r\n[ ]*$"? no ".*[(]gdb[)] \r\n[ ]*$"? no ""? no "\(y or n\) "? no full_buffer? no 200-break-delete 200^done (gdb) expect: does "200-break-delete\r\n200^done\r\n(gdb) \r\n" (spawn_id exp11) match regular expression "\*\*\* DOSEXIT code.*"? no "Ending remote debugging.*[(]gdb[)] \r\n[ ]*$"? no "([\r\n]*((\^done)[\r\n]+[(]gdb[)] \r\n[ ]*$))"? yes expect: set expect_out(0,string) "^done\r\n(gdb) \r\n" expect: set expect_out(1,string) "^done\r\n(gdb) \r\n" expect: set expect_out(2,string) "^done\r\n(gdb) \r\n" expect: set expect_out(3,string) "^done" expect: set expect_out(spawn_id) "exp11" expect: set expect_out(buffer) "200-break-delete\r\n200^done\r\n(gdb) \r\n" PASS: gdb.mi/mi2-basics.exp: break-delete (all) operation send: sending "201-break-list\n" to { exp11 } expect: does "" (spawn_id exp11) match regular expression "\*\*\* DOSEXIT code.*"? no "Ending remote debugging.*[(]gdb[)] \r\n[ ]*$"? no "([\r\n]*((.*\^done,BreakpointTable=\{.*,body=\[\]\})[\r\n]+[(]gdb[)] \r\n[ ]*$))"? no "(^FOOBAR$)$"? no "Undefined.* command:.*[(]gdb[)] \r\n[ ]*$"? no "Ambiguous command.*[(]gdb[)] \r\n[ ]*$"? no "Program exited with code [0-9]+.*[(]gdb[)] \r\n[ ]*$"? no "The program is not being run.*[(]gdb[)] \r\n[ ]*$"? no ".*[(]gdb[)] \r\n[ ]*$"? no ""? no "\(y or n\) "? no full_buffer? no 201-break-list 201^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]} (gdb) expect: does "201-break-list\r\n201^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}\r\n(gdb) \r\n" (spawn_id exp11) match regular expression "\*\*\* DOSEXIT code.*"? no "Ending remote debugging.*[(]gdb[)] \r\n[ ]*$"? no "([\r\n]*((.*\^done,BreakpointTable=\{.*,body=\[\]\})[\r\n]+[(]gdb[)] \r\n[ ]*$))"? yes expect: set expect_out(0,string) "201-break-list\r\n201^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}\r\n(gdb) \r\n" expect: set expect_out(1,string) "201-break-list\r\n201^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}\r\n(gdb) \r\n" expect: set expect_out(2,string) "201-break-list\r\n201^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}\r\n(gdb) \r\n" expect: set expect_out(3,string) "201-break-list\r\n201^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}" expect: set expect_out(spawn_id) "exp11" expect: set expect_out(buffer) "201-break-list\r\n201^done,BreakpointTable={nr_rows="0",nr_cols="6",hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[]}\r\n(gdb) \r\n"