1 # Copyright
1997, 1998, 2004, 2005 Free Software Foundation
, Inc.
3 # This
program is free software
; you can redistribute it and
/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation
; either version
2 of the License
, or
6 #
(at your option
) any later version.
8 # This
program is distributed in the hope that it will be useful
,
9 # but WITHOUT
ANY WARRANTY
; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License
for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this
program; if not
, write to the Free Software
15 # Foundation
, Inc.
, 59 Temple Place
- Suite
330, Boston
, MA
02111-1307, USA.
17 # This file is part of the gdb testsuite.
18 # tests
for exception
-handling support
19 # Written by Satish Pai
<pai@apollo.hp.com
> 1997-07-23
20 # Rewritten by Michael Chastain
<mec.gnu@mindspring.com
> 2004-01-08
22 # This file used to have two copies of the tests with different
23 # compiler flags
for hp
-ux. Instead
, the user should
set CXXOPTS
24 # or run runtest with
--target_board unix
/gdb
:debug_flags
="..."
25 # to choose the compiler flags.
27 # The interesting compiler flags are
: "aCC +A -Wl,-a,-archive" .
28 # Static
-linked executables use a different mechanism to
get the
29 # address of the notification hook in the C
++ support library.
31 # TODO
: this file is not ready
for production yet.
If you are working
32 #
on C
++ exception support
for gdb
, you can take out the
"continue"
33 # statement and try your luck.
-- chastain
2004-01-09
35 # TODO
: this file has many absolute line numbers.
36 # Replace them with gdb_get_line_number.
45 if { [skip_cplus_tests
] } { continue }
47 set testfile
"exception"
48 set srcfile $
{testfile
}.cc
49 set binfile $
{objdir
}/$
{subdir
}/$
{testfile
}
51 if { [gdb_compile
"${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
52 gdb_suppress_entire_file
"Testcase compile failed, so all tests in this file will automatically fail."
55 # Start with a fresh gdb
62 gdb_reinitialize_dir $srcdir
/$subdir
65 if ![runto_main
] then {
66 perror
"couldn't run to breakpoint"
70 # As I said before
, this test script is not ready yet
!
74 #
Set a catch catchpoint
76 gdb_test
"catch catch" "Catchpoint \[0-9\]+ \\(catch\\)"
78 #
Set a throw catchpoint
80 gdb_test
"catch throw" "Catchpoint \[0-9\]+ \\(throw\\)" \
81 "catch throw (static executable)"
83 # The catchpoints should be listed in the list of breakpoints.
85 set re_head
"Num${ws}Type${ws}Disp${ws}Enb${ws}Address${ws}What"
86 set re_1_main
"1${ws}breakpoint${ws}keep${ws}y${ws}$hex${ws}in main.*breakpoint already hit.*"
87 set re_2_catch
"2${ws}catch catch${ws}keep${ws}y${ws}$hex${ws}exception catch"
88 set re_3_catch
"3${ws}catch throw${ws}keep${ws}y${ws}$hex${ws}exception throw"
89 set re_2_bp
"2${ws}breakpoint${ws}keep${ws}y${ws}$hex${ws}exception catch"
90 set re_3_bp
"3${ws}breakpoint${ws}keep${ws}y${ws}$hex${ws}exception throw"
92 set name "info breakpoints"
93 gdb_test_multiple
"info breakpoints" $name {
94 -re
"$re_head${ws}$re_1_main${ws}$re_2_catch${ws}$re_3_catch\r\n$gdb_prompt $" {
97 -re
"$re_head${ws}$re_1_main${ws}$re_2_bp${ws}$re_3_bp\r\n$gdb_prompt $" {
98 # TODO
: gdb HEAD
2004-01-08 does this. Is this okay?
103 # Some targets support
"info catch".
106 set name "info catch"
107 gdb_test_multiple
"info catch" $name {
108 -re
"Info catch not supported with this target/compiler combination.\r\n$gdb_prompt $" {
111 -re
"No catches.\r\n$gdb_prompt $" {
112 # TODO
: gdb HEAD
2004-01-08 does this. Is this okay?
117 #
Get the first exception thrown
119 set name "continue to first throw"
120 gdb_test_multiple
"continue" $name {
121 -re
"Continuing.${ws}Catchpoint \[0-9\]+ \\(exception thrown\\), throw location.*${srcfile}:30, catch location .*${srcfile}:50\r\n$gdb_prompt $" {
124 -re
"Continuing.${ws}Catchpoint \[0-9\]+ \\(exception thrown\\)\r\n.*\r\n$gdb_prompt $" {
125 # TODO
: gdb HEAD
2004-01-08 does this. Is this okay?
130 # Backtrace from the throw point.
131 # This should
get to user code.
133 set name "backtrace after first throw"
134 gdb_test_multiple
"backtrace" $name {
135 -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 $" {
140 #
Continue to the catch.
142 set name "continue to first catch"
143 gdb_test_multiple
"continue" $name {
144 -re
"Continuing.${ws}Catchpoint \[0-9\]+ \\(exception caught\\), throw location.*${srcfile}:30, catch location .*${srcfile}:50\r\n$gdb_prompt $" {
147 -re
"Continuing.${ws}Catchpoint \[0-9\]+ \\(exception caught\\)\r\n.*\r\n$gdb_prompt $" {
148 # TODO
: gdb HEAD
2004-01-08 does this. Is this okay?
153 # Backtrace from the catch point.
154 # This should
get to user code.
156 set name "backtrace after first catch"
157 gdb_test_multiple
"backtrace" $name {
158 -re
".*#\[0-9\]+${ws}$hex in main \\((void|)\\) at .*$srcfile:50\r\n$gdb_prompt $" {
163 #
Continue to second throw.
165 set name "continue to second throw"
166 gdb_test_multiple
"continue" $name {
167 -re
"Continuing.${ws}Got an except 13${ws}Catchpoint \[0-9\]+ \\(exception thrown\\), throw location.*${srcfile}:30, catch location .*${srcfile}:58\r\n$gdb_prompt $" {
170 -re
"Continuing.${ws}Got an except 13${ws}Catchpoint \[0-9\]+ \\(exception thrown\\)\r\n.*\r\n$gdb_prompt $" {
171 # TODO
: gdb HEAD
2004-01-08 does this. Is this okay?
176 # Backtrace from the throw point.
177 # This should
get to user code.
179 set name "backtrace after second throw"
180 gdb_test_multiple
"backtrace" $name {
181 -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 $" {
186 #
Continue to second catch.
188 set name "continue to second catch"
189 gdb_test_multiple
"continue" $name {
190 -re
"Continuing.${ws}Catchpoint \[0-9\]+ \\(exception caught\\), throw location.*${srcfile}:30, catch location .*${srcfile}:58\r\n$gdb_prompt $" {
193 -re
"Continuing.${ws}Catchpoint \[0-9\]+ \\(exception caught\\)\r\n.*\r\n$gdb_prompt $" {
194 # TODO
: gdb HEAD
2004-01-08 does this. Is this okay?
199 # Backtrace from the catch point.
200 # This should
get to user code.
202 set name "backtrace after second catch"
203 gdb_test_multiple
"backtrace" $name {
204 -re
".*#\[0-9\]+${ws}$hex in main \\((void|)\\) at .*$srcfile:58\r\n$gdb_prompt $" {
209 # That is all
for now.
211 # The original code had
:
213 #
continue to re
-throw
; backtrace
214 #
continue to catch
; backtrace
215 #
continue to throw out of main
217 # The problem is that
"re-throw" does not show a throw; only a catch.
218 # I
do not know
if this is because of a bug
, or because the generated
219 # code is optimized
for a throw into the same function.
221 #
-- chastain
2004-01-09