This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA/c++testsuite] New test for constructor breakpoints
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: Michael Elizabeth Chastain <mec at shout dot net>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Tue, 19 Feb 2002 18:35:34 -0500
- Subject: Re: [RFA/c++testsuite] New test for constructor breakpoints
- References: <200202182025.g1IKPpc04061@duracef.shout.net>
On Mon, Feb 18, 2002 at 02:25:51PM -0600, Michael Elizabeth Chastain wrote:
> This patch is returned for rework. I like the patch, but there is
> a cascade problem:
>
> "set_bp_overloaded foo::foo" tests FAIL
> the breakpoints are not present
> continue_to_bp_constructor issues "continue" unconditionally
> the script loses synchronization with the program-under-test at this point
> all the tests after that FAIL
Well, I had to file a bug on expect's manual page to get this to work,
but I did. How's this patch? The magic is in -notransfer.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
2002-02-19 Daniel Jacobowitz <drow@mvista.com>
* gdb.c++/ovldbreak.exp: Test breakpoints on the constructors.
Index: ovldbreak.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.c++/ovldbreak.exp,v
retrieving revision 1.3
diff -u -r1.3 ovldbreak.exp
--- ovldbreak.exp 2001/01/28 23:49:43 1.3
+++ ovldbreak.exp 2002/02/19 23:32:27
@@ -231,8 +231,6 @@
\[0-9\]+\[\t \]+breakpoint keep y\[\t \]+$hex in foo::overload1arg\\((void|)\\) at.*$srcfile:110" \
"breakpoint info (after cancel)"
-
-
# Delete these breakpoints.
send_gdb "delete breakpoints\n"
@@ -309,13 +307,58 @@
"breakpoint info (after setting on all)"
+# Set breakpoints on the overloaded constructor.
+set menu_constructor "\\\[0\\\] cancel\r\n\\\[1\\\] all\r\n\\\[2\\\] foo::foo\\(foo ?&\\) at.*$srcfile:104\r\n\\\[3\\\] foo::foo\\(int, char const ?\\*\\) at.*$srcfile:103\r\n\\\[4\\\] foo::foo\\(int\\) at.*$srcfile:102\r\n> $"
+set_bp_overloaded "foo::foo" "$menu_constructor" 2 26 104
+set_bp_overloaded "foo::foo" "$menu_constructor" 3 27 103
+set_bp_overloaded "foo::foo" "$menu_constructor" 4 28 102
+
# Run through each breakpoint.
-proc continue_to_bp_overloaded {bpnumber argtype actuals} {
+global last_bp_hit
+set last_bp_hit 300
+
+proc continue_to_bp_constructor {bpnumber argtypes args actuals} {
global gdb_prompt hex decimal srcfile
+ global last_bp_hit
+
+ if {$last_bp_hit < 26} {
+ fail "continue to bp overloaded constructor : ${argtypes} (overshot)"
+ return
+ }
send_gdb "continue\n"
+ gdb_expect {
+ -re "Continuing.\r\n\r\nBreakpoint ${bpnumber}, (${hex} in )?foo::foo(\\(${argtypes}\\))? \\(this=${hex}(, )?${actuals}\\) at.*${srcfile}:${decimal}\r\n${decimal}\[\t \]+foo::foo *\\(${args}\\).*\r\n.*$gdb_prompt $" {
+ pass "continue to bp overloaded constructor : ${argtypes}"
+ }
+ -notransfer -re "Continuing.\r\n\r\nBreakpoint (\[0-9\]*).*$gdb_prompt $" {
+ set last_bp_hit $expect_out(1,string)
+ fail "continue to bp overloaded constructor : ${argtypes} (wrong breakpoint)"
+ }
+ -re ".*$gdb_prompt $" {
+ fail "continue to bp overloaded constructor : ${argtypes}"
+ }
+ timeout {
+ fail "continue to bp overloaded constructor : ${argtypes} (timeout)"
+ }
+ }
+}
+
+continue_to_bp_constructor 28 "int" "int i" "i=111"
+continue_to_bp_constructor 27 "int, char const ?\\*" \
+ "int i, const char \\*ccp" "i=222, ccp=$hex \"A\""
+continue_to_bp_constructor 26 "foo ?&" "foo& afoo" "afoo=@$hex"
+
+proc continue_to_bp_overloaded {bpnumber argtype actuals} {
+ global gdb_prompt hex decimal srcfile
+ global last_bp_hit
+
+ if { $last_bp_hit != $bpnumber } {
+ send_gdb "continue\n"
+ }
+
gdb_expect {
-re "Continuing.\r\n\r\nBreakpoint ${bpnumber}, (${hex} in )?foo::overload1arg(\\(${argtype}\\))? \\(this=${hex}(, )?${actuals}\\) at.*${srcfile}:${decimal}\r\n${decimal}\[\t \]+int foo::overload1arg \\(${argtype}( arg)?\\).*\r\n.*$gdb_prompt $" {
pass "continue to bp overloaded : ${argtype}"