This is the mail archive of the gdb-patches@sources.redhat.com 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: [RFA] Fix inferior restart problem in gdb.base/commands.exp


Here is an updated patch that checks that the right breakpoint is
getting hit, and only that breakpoint.  It also has some format tweaks
for consistency.

-Fred

  2002-09-07  Fred Fish  <fnf@intrinsity.com>

	* gdb.base/run.c (all_done): Add function and call it at end of main.
	* gdb.base/commands.exp (bp_deleted_in_command_test): Set breakpoint
	at all_done so we don't exit, which makes restarting more difficult.
	Call factorial with 2 instead of 1 to check breakpoint cleared.
	Adjust expected success results to match stopping at all_done.
	(temporary_breakpoint_commands): Ditto.
	(watchpoint_command_test): Adjust hardcoded line number to match.

Index: gdb.base/commands.exp
===================================================================
RCS file: /mips/newtools/fsf/gdb/gdb/testsuite/gdb.base/commands.exp,v
retrieving revision 1.1.1.2
diff -c -p -r1.1.1.2 commands.exp
*** gdb.base/commands.exp	2002/08/31 02:49:15	1.1.1.2
--- gdb.base/commands.exp	2002/09/07 15:12:05
*************** proc watchpoint_command_test {} {
*** 331,337 ****
      }
      send_gdb "continue\n"
      gdb_expect {
! 	-re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:57.*$gdb_prompt $" {
  	    pass "continue with watch"
  	}
  	-re "$gdb_prompt $"   {fail "continue with watch"}
--- 331,337 ----
      }
      send_gdb "continue\n"
      gdb_expect {
! 	-re "Continuing.*\[Ww\]atchpoint $wp_id deleted because the program has left the block in.*which its expression is valid.*run.c:60.*$gdb_prompt $" {
  	    pass "continue with watch"
  	}
  	-re "$gdb_prompt $"   {fail "continue with watch"}
*************** proc deprecated_command_test {} {
*** 443,451 ****
  proc bp_deleted_in_command_test {} {
      global gdb_prompt
      
!     gdb_test "set args 1" "" "set args in bp_deleted_in_command_test"
      delete_breakpoints
  
      # Create a breakpoint, and associate a command-list to it, with
      # one command that deletes this breakpoint.
      gdb_test "break factorial" \
--- 443,459 ----
  proc bp_deleted_in_command_test {} {
      global gdb_prompt
      
!     gdb_test "set args 2" "" "set args in bp_deleted_in_command_test"
      delete_breakpoints
  
+     # Set a breakpoint that will prevent us from running to completion and exiting.
+     # If we allow the inferior to exit, gdb_run_cmd may not be sufficient to get us
+     # going again in a future test without a full restart, when using a gdb stub.
+ 
+     gdb_test "break all_done" \
+              "Breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\." \
+              "breakpoint at all_done"
+ 
      # Create a breakpoint, and associate a command-list to it, with
      # one command that deletes this breakpoint.
      gdb_test "break factorial" \
*************** proc bp_deleted_in_command_test {} {
*** 470,487 ****
      gdb_expect {
          -re ">"               {pass "add clear command"}
          -re "$gdb_prompt $"   {fail "add clear command"}
!         timeout               {fail "(timeout) add clear command"} }
      send_gdb "printf \"factorial command-list executed\\n\"\n"
      gdb_expect {
          -re ">"               {pass "add printf command"}
          -re "$gdb_prompt $"   {fail "add printf command"}
          timeout               {fail "(timeout) add printf command"}
      }
      send_gdb "cont\n"
      gdb_expect {
          -re ">"               {pass "add cont command"}
          -re "$gdb_prompt $"   {fail "add cont command"}
!         timeout               {fail "(timeout) add cont command"} }
      send_gdb "end\n"
      gdb_expect {
          -re "$gdb_prompt $"   {pass "end commands"}
--- 478,503 ----
      gdb_expect {
          -re ">"               {pass "add clear command"}
          -re "$gdb_prompt $"   {fail "add clear command"}
!         timeout               {fail "(timeout) add clear command"}
!     }
      send_gdb "printf \"factorial command-list executed\\n\"\n"
      gdb_expect {
          -re ">"               {pass "add printf command"}
          -re "$gdb_prompt $"   {fail "add printf command"}
          timeout               {fail "(timeout) add printf command"}
      }
+     send_gdb "print value\n"
+     gdb_expect {
+         -re ">"               {pass "add print value command"}
+         -re "$gdb_prompt $"   {fail "add print value command"}
+         timeout               {fail "(timeout) add print value command"}
+     }
      send_gdb "cont\n"
      gdb_expect {
          -re ">"               {pass "add cont command"}
          -re "$gdb_prompt $"   {fail "add cont command"}
!         timeout               {fail "(timeout) add cont command"}
!     }
      send_gdb "end\n"
      gdb_expect {
          -re "$gdb_prompt $"   {pass "end commands"}
*************** proc bp_deleted_in_command_test {} {
*** 489,496 ****
      }
  
      gdb_run_cmd
      gdb_expect {
!         -re ".*factorial command-list executed.*1.*Program exited normally.*$gdb_prompt $" {
  	    pass "run factorial until breakpoint"
          }
  	-re ".*$gdb_prompt $" {
--- 505,515 ----
      }
  
      gdb_run_cmd
+     # Note that we specifically don't check that the inferior printed any output
+     # since it is immaterial to the test results and we don't want to have to check
+     # whether or not "noinferiorio" is set.
      gdb_expect {
!         -re ".*factorial command-list executed.*\\$\[0-9\]* = 2\[ \r\n\]+.*Breakpoint \[0-9\]+, all_done.*$gdb_prompt $" {
  	    pass "run factorial until breakpoint"
          }
  	-re ".*$gdb_prompt $" {
*************** proc bp_deleted_in_command_test {} {
*** 504,512 ****
  proc temporary_breakpoint_commands {} {
      global gdb_prompt
      
!     gdb_test "set args 1" "" "set args in temporary_breakpoint_commands"
      delete_breakpoints
  
      # Create a temporary breakpoint, and associate a commands list to it.
      # This test will verify that this commands list is executed when the
      # breakpoint is hit.
--- 523,539 ----
  proc temporary_breakpoint_commands {} {
      global gdb_prompt
      
!     gdb_test "set args 2" "" "set args in temporary_breakpoint_commands"
      delete_breakpoints
  
+     # Set a breakpoint that will prevent us from running to completion and exiting.
+     # If we allow the inferior to exit, gdb_run_cmd may not be sufficient to get us
+     # going again in a future test without a full restart, when using a gdb stub.
+ 
+     gdb_test "break all_done" \
+              "Breakpoint \[0-9\]+ at .*: file .*/run.c, line \[0-9\]+\." \
+              "breakpoint at all_done"
+ 
      # Create a temporary breakpoint, and associate a commands list to it.
      # This test will verify that this commands list is executed when the
      # breakpoint is hit.
*************** proc temporary_breakpoint_commands {} {
*** 527,555 ****
  	-re ">"               {pass "add silent tbreak command"}
  	-re "$gdb_prompt $"   {fail "add silent tbreak command"}
  	timeout               {fail "(timeout) add silent tbreak command"}
!      }
      send_gdb "printf \"factorial tbreak commands executed\\n\"\n"
      gdb_expect {
  	-re ">"               {pass "add printf tbreak command"}
  	-re "$gdb_prompt $"   {fail "add printf tbreak command"}
  	timeout               {fail "(timeout) add printf tbreak command"}
!      }
      send_gdb "cont\n"
      gdb_expect {
  	-re ">"               {pass "add cont tbreak command"}
  	-re "$gdb_prompt $"   {fail "add cont tbreak command"}
! 	timeout               {fail "(timeout) add cont tbreak command"} }
      send_gdb "end\n"
      gdb_expect {
  	-re "$gdb_prompt $"   {pass "end tbreak commands"}
  	timeout               {fail "(timeout) end tbreak commands"}
!      }
  
      gdb_run_cmd
      gdb_expect {
! 	-re ".*factorial tbreak commands executed.*1.*Program exited normally.*" {
  	    pass "run factorial until temporary breakpoint"
  	}
  	timeout { fail "(timeout) run factorial until temporary breakpoint" }
      }
  }
--- 554,596 ----
  	-re ">"               {pass "add silent tbreak command"}
  	-re "$gdb_prompt $"   {fail "add silent tbreak command"}
  	timeout               {fail "(timeout) add silent tbreak command"}
!     }
      send_gdb "printf \"factorial tbreak commands executed\\n\"\n"
      gdb_expect {
  	-re ">"               {pass "add printf tbreak command"}
  	-re "$gdb_prompt $"   {fail "add printf tbreak command"}
  	timeout               {fail "(timeout) add printf tbreak command"}
!     }
!     send_gdb "print value\n"
!     gdb_expect {
!         -re ">"               {pass "add print value tbreak command"}
!         -re "$gdb_prompt $"   {fail "add print value tbreak command"}
!         timeout               {fail "(timeout) add print value tbreak command"}
!     }
      send_gdb "cont\n"
      gdb_expect {
  	-re ">"               {pass "add cont tbreak command"}
  	-re "$gdb_prompt $"   {fail "add cont tbreak command"}
! 	timeout               {fail "(timeout) add cont tbreak command"}
!     }
      send_gdb "end\n"
      gdb_expect {
  	-re "$gdb_prompt $"   {pass "end tbreak commands"}
  	timeout               {fail "(timeout) end tbreak commands"}
!     }
  
      gdb_run_cmd
+     # Note that we specifically don't check that the inferior printed any output
+     # since it is immaterial to the test results and we don't want to have to check
+     # whether or not "noinferiorio" is set.
      gdb_expect {
!         -re ".*factorial tbreak commands executed.*\\$\[0-9\]* = 2\[ \r\n\]+.*Breakpoint \[0-9\]+, all_done.*$gdb_prompt $" {
  	    pass "run factorial until temporary breakpoint"
+         }
+ 	-re ".*$gdb_prompt $" {
+ 	    fail "run factorial until temporary breakpoint"
  	}
+ 	default { fail "(timeout) run factorial until temporary breakpoint" }
  	timeout { fail "(timeout) run factorial until temporary breakpoint" }
      }
  }
Index: gdb.base/run.c
===================================================================
RCS file: /mips/newtools/fsf/gdb/gdb/testsuite/gdb.base/run.c,v
retrieving revision 1.1.1.1
diff -c -p -r1.1.1.1 run.c
*** gdb.base/run.c	2002/07/03 16:56:33	1.1.1.1
--- gdb.base/run.c	2002/09/07 15:12:05
*************** char *arg;
*** 37,42 ****
--- 37,45 ----
  #  include <stdlib.h>
  #endif /* ! vxworks */
  
+ /* Someplace we can set a breakpoint to avoid running to completion when needed */
+ void all_done () {};
+ 
  #ifdef PROTOTYPES
  int factorial (int);
  
*************** char *argv[], **envp;
*** 54,60 ****
      breakpoint();
  #endif
  #ifdef FAKEARGV
!     printf ("%d\n", factorial (1));
  #else    
      if (argc != 2) {
  	printf ("usage:  factorial <number>\n");
--- 57,63 ----
      breakpoint();
  #endif
  #ifdef FAKEARGV
!     printf ("%d\n", factorial (2));
  #else    
      if (argc != 2) {
  	printf ("usage:  factorial <number>\n");
*************** char *argv[], **envp;
*** 63,68 ****
--- 66,72 ----
  	printf ("%d\n", factorial (atoi (argv[1])));
      }
  #endif
+     all_done ();
      return 0;
  }
  


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