Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Aleksandar Ristovski <aristovski@qnx.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [patch] PR gdb/1665 pending catch/throw catchpoints
Date: Thu, 05 Jun 2008 16:06:00 -0000	[thread overview]
Message-ID: <20080605160543.GC29085@caradoc.them.org> (raw)
In-Reply-To: <481B52B1.2050609@qnx.com>

Sorry for the delay.

On Fri, May 02, 2008 at 01:43:13PM -0400, Aleksandar Ristovski wrote:
>>> +gdb_test "tbreak main" "Temporary breakpoint 3.*" \
>>> +    "Set temporary breakpoint at main"
>>> +
>>> +gdb_test "run" "Temporary breakpoint 3,.*" "Run to main"
>>
>> There's runto_main, use that instead; it handles remote targets and so
>> forth.
>
> Yeah, but it wouldn't work in my case as it deletes breakpoints automagically. I introduced new runto_main_new that accepts options like temporary-break and keep-breakpoints.

In that case, you just need gdb_run_cmd instead of runto_main.  Then
you can expect exactly the output you need.

With that changed (replacement patch attached) I get:

continue
Continuing.
Catchpoint 2 (thrown), 0x00026610 in __cxa_throw ()
(gdb) FAIL: gdb.cp/exception.exp: continue to first throw

continue
Continuing.
Catchpoint 1 (caught), 0x00025094 in __cxa_begin_catch ()
(gdb) FAIL: gdb.cp/exception.exp: continue to first catch

continue
Continuing.
Got an except 13
Catchpoint 2 (thrown), 0x00026610 in __cxa_throw ()
(gdb) FAIL: gdb.cp/exception.exp: continue to second throw

continue
Continuing.
Catchpoint 1 (caught), 0x00025094 in __cxa_begin_catch ()
(gdb) FAIL: gdb.cp/exception.exp: continue to second catch

Did you deliberately replace (exception thrown) with (thrown)
in your 2008-05-28 patch to print_exception_catchpoint?

-- 
Daniel Jacobowitz
CodeSourcery

Index: exception.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.cp/exception.exp,v
retrieving revision 1.12
diff -u -p -r1.12 exception.exp
--- exception.exp	1 Jan 2008 22:53:19 -0000	1.12
+++ exception.exp	5 Jun 2008 16:05:09 -0000
@@ -27,10 +27,6 @@
 # Static-linked executables use a different mechanism to get the
 # address of the notification hook in the C++ support library.
 
-# TODO: this file is not ready for production yet.  If you are working
-# on C++ exception support for gdb, you can take out the "continue"
-# statement and try your luck.  -- chastain 2004-01-09
-
 # TODO: this file has many absolute line numbers.
 # Replace them with gdb_get_line_number.
 
@@ -67,56 +63,69 @@ gdb_start
 gdb_reinitialize_dir $srcdir/$subdir
 gdb_load ${binfile}
 
-if ![runto_main] then {
-    perror "couldn't run to breakpoint"
-    continue
-}
-
-# As I said before, this test script is not ready yet!
-
-continue
-
 # Set a catch catchpoint
 
-gdb_test "catch catch" "Catchpoint \[0-9\]+ \\(catch\\)"
+gdb_test "catch catch" "Catchpoint \[0-9\]+ \\(catch\\)" \
+    "catch catch (before inferior run)"
 
 # Set a throw catchpoint
 
 gdb_test "catch throw" "Catchpoint \[0-9\]+ \\(throw\\)" \
-    "catch throw (static executable)"
+    "catch throw (before inferior run)"
 
-# The catchpoints should be listed in the list of breakpoints.
 
+# The catchpoints should be listed in the list of breakpoints.
+# In case of a statically linked test, we won't have a pending breakpoint.
+# Hence we allow for both an address or "<PENDING>". If we ever become able
+# to tell whether the target is linked statically or not, we can be more
+# precise and require exact output.
+set addr "\(<PENDING>|$hex\)"
 set re_head	"Num${ws}Type${ws}Disp${ws}Enb${ws}Address${ws}What"
-set re_1_main   "1${ws}breakpoint${ws}keep${ws}y${ws}$hex${ws}in main.*breakpoint already hit.*"
-set re_2_catch	"2${ws}catch catch${ws}keep${ws}y${ws}$hex${ws}exception catch"
-set re_3_catch	"3${ws}catch throw${ws}keep${ws}y${ws}$hex${ws}exception throw"
-set re_2_bp	"2${ws}breakpoint${ws}keep${ws}y${ws}$hex${ws}exception catch"
-set re_3_bp	"3${ws}breakpoint${ws}keep${ws}y${ws}$hex${ws}exception throw"
+set re_2_bp	"1${ws}breakpoint${ws}keep${ws}y${ws}$addr${ws}exception catch"
+set re_3_bp	"2${ws}breakpoint${ws}keep${ws}y${ws}$addr${ws}exception throw"
 
-set name "info breakpoints"
+set name "info breakpoints (before inferior run)"
 gdb_test_multiple "info breakpoints" $name {
-    -re "$re_head${ws}$re_1_main${ws}$re_2_catch${ws}$re_3_catch\r\n$gdb_prompt $" {
+    -re "$re_head${ws}$re_2_bp${ws}$re_3_bp\r\n$gdb_prompt $" {
 	pass $name
     }
-    -re "$re_head${ws}$re_1_main${ws}$re_2_bp${ws}$re_3_bp\r\n$gdb_prompt $" {
-	# TODO: gdb HEAD 2004-01-08 does this.  Is this okay?
-	unresolved $name
-    }
+    -re ".*$gdb_prompt $"
+      {
+	fail $name
+      }
 }
 
-# Some targets support "info catch".
-# Some do not.
+gdb_test "tbreak main" "Temporary breakpoint 3.*" \
+    "Set temporary breakpoint at main"
 
-set name "info catch"
-gdb_test_multiple "info catch" $name {
-    -re "Info catch not supported with this target/compiler combination.\r\n$gdb_prompt $" {
-	unsupported $name
+set ok 0
+gdb_run_cmd
+gdb_test_multiple "" "Run to main" {
+    -re "Temporary breakpoint 3,.*$gdb_prompt $" {
+	pass "Run to main"
+	set ok 1
     }
-    -re "No catches.\r\n$gdb_prompt $" {
-	# TODO: gdb HEAD 2004-01-08 does this.  Is this okay?
-	unresolved $name
+}
+
+if { !$ok } {
+    continue
+}
+
+set addr "$hex"
+set re_head	"Num${ws}Type${ws}Disp${ws}Enb${ws}Address${ws}What"
+set re_2_bp	"1${ws}breakpoint${ws}keep${ws}y${ws}$addr${ws}exception catch"
+set re_3_bp	"2${ws}breakpoint${ws}keep${ws}y${ws}$addr${ws}exception throw"
+
+set name "info breakpoints (after inferior run)"
+gdb_test_multiple "info breakpoints" $name {
+    -re "$re_head${ws}$re_2_bp${ws}$re_3_bp\r\n$gdb_prompt $" {
+	pass $name
     }
+    -re ".*$gdb_prompt $"
+      {
+	send_user "\n---\n$expect_out(buffer)\n---\n"
+	fail $name
+      }
 }
 
 # Get the first exception thrown
@@ -127,8 +136,7 @@ gdb_test_multiple "continue" $name {
 	pass $name
     }
     -re "Continuing.${ws}Catchpoint \[0-9\]+ \\(exception thrown\\)\r\n.*\r\n$gdb_prompt $" {
-	# TODO: gdb HEAD 2004-01-08 does this.  Is this okay?
-	unresolved $name
+	pass $name
     }
 }
 
@@ -137,7 +145,7 @@ gdb_test_multiple "continue" $name {
 
 set name "backtrace after first throw"
 gdb_test_multiple "backtrace" $name {
-    -re ".*#\[0-9\]+${ws}$hex in foo \\(i=20\\) at .*${srcfile}:30\r\n#\[0-9\]+${ws}$hex in main \\((void|)\\) at .*${srcfile}:48\r\n$gdb_prompt $" {
+    -re ".*#\[0-9\]+${ws}$hex in __cxa_throw.*#\[0-9\]+${ws}$hex in foo \\(i=20\\) at .*${srcfile}:\[0-9\]+\r\n#\[0-9\]+${ws}$hex in main \\(.*\\) at .*${srcfile}:\[0-9\]+\r\n$gdb_prompt $" {
 	pass $name
     }
 }
@@ -150,8 +158,7 @@ gdb_test_multiple "continue" $name {
 	pass $name
     }
     -re "Continuing.${ws}Catchpoint \[0-9\]+ \\(exception caught\\)\r\n.*\r\n$gdb_prompt $" {
-	# TODO: gdb HEAD 2004-01-08 does this.  Is this okay?
-	unresolved $name
+	pass $name
     }
 }
 
@@ -160,7 +167,7 @@ gdb_test_multiple "continue" $name {
 
 set name "backtrace after first catch"
 gdb_test_multiple "backtrace" $name {
-    -re ".*#\[0-9\]+${ws}$hex in main \\((void|)\\) at .*$srcfile:50\r\n$gdb_prompt $" {
+    -re ".*#\[0-9\]+${ws}$hex in __cxa_begin_catch.*#\[0-9\]+${ws}$hex in main \\(.*\\) at .*$srcfile:\[0-9\]+\r\n$gdb_prompt $" {
 	pass $name
     }
 }
@@ -173,8 +180,7 @@ gdb_test_multiple "continue" $name {
 	pass $name
     }
     -re "Continuing.${ws}Got an except 13${ws}Catchpoint \[0-9\]+ \\(exception thrown\\)\r\n.*\r\n$gdb_prompt $" {
-	# TODO: gdb HEAD 2004-01-08 does this.  Is this okay?
-	unresolved $name
+	pass $name
     }
 }
 
@@ -183,7 +189,7 @@ gdb_test_multiple "continue" $name {
 
 set name "backtrace after second throw"
 gdb_test_multiple "backtrace" $name {
-    -re ".*#\[0-9\]+${ws}$hex in foo \\(i=20\\) at .*${srcfile}:30\r\n#\[0-9\]+${ws}$hex in main \\((void|)\\) at .*${srcfile}:56\r\n$gdb_prompt $" {
+    -re ".*#\[0-9\]+${ws}$hex in __cxa_throw.*#\[0-9\]+${ws}$hex in foo \\(i=20\\) at .*${srcfile}:\[0-9\]+\r\n#\[0-9\]+${ws}$hex in main \\(.*\\) at .*${srcfile}:\[0-9\]+\r\n$gdb_prompt $" {
 	pass $name
     }
 }
@@ -196,8 +202,7 @@ gdb_test_multiple "continue" $name {
 	pass $name
     }
     -re "Continuing.${ws}Catchpoint \[0-9\]+ \\(exception caught\\)\r\n.*\r\n$gdb_prompt $" {
-	# TODO: gdb HEAD 2004-01-08 does this.  Is this okay?
-	unresolved $name
+	pass $name
     }
 }
 
@@ -206,7 +211,7 @@ gdb_test_multiple "continue" $name {
 
 set name "backtrace after second catch"
 gdb_test_multiple "backtrace" $name {
-    -re ".*#\[0-9\]+${ws}$hex in main \\((void|)\\) at .*$srcfile:58\r\n$gdb_prompt $" {
+    -re ".*#\[0-9\]+${ws}$hex in __cxa_begin_catch.*#\[0-9\]+${ws}$hex in main \\(.*\\) at .*$srcfile:\[0-9\]+\r\n$gdb_prompt $" {
 	pass $name
     }
 }


  parent reply	other threads:[~2008-06-05 16:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-29 22:30 Aleksandar Ristovski
2008-04-30  7:09 ` Aleksandar Ristovski
2008-05-01 20:13   ` Daniel Jacobowitz
2008-05-02 17:55     ` Aleksandar Ristovski
2008-05-02 18:07       ` Aleksandar Ristovski
2008-06-05 16:06       ` Daniel Jacobowitz [this message]
2008-06-05 16:40         ` Aleksandar Ristovski
2008-06-05 17:36           ` Daniel Jacobowitz
2008-06-05 18:40             ` Aleksandar Ristovski
2008-05-01 20:07 ` Daniel Jacobowitz
2008-05-01 20:38   ` Aleksandar Ristovski

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=20080605160543.GC29085@caradoc.them.org \
    --to=drow@false.org \
    --cc=aristovski@qnx.com \
    --cc=gdb-patches@sources.redhat.com \
    /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