1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
# Copyright 2011-2020 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
load_lib "ada.exp"
if { [skip_ada_tests] } { return -1 }
standard_ada_testfile foo
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
return -1
}
# A global variable used to simplify the maintenance of some of
# the regular expressions below.
set eol "\[\r\n\]+"
# Before going any further, verify that we can insert exception
# handlers catchpoints... That way, we won't have to do this while
# doing the actual GDB/MI testing.
clean_restart ${testfile}
if ![runto_main] then {
fail "cannot run to main, testcase aborted"
return 0
}
set msg "insert catchpoint on all Ada exceptions handlers"
gdb_test_multiple "catch handlers" $msg {
-re "Catchpoint $decimal: all Ada exceptions handlers$eol$gdb_prompt $" {
pass $msg
}
-re "Your Ada runtime appears to be missing some debugging information.*\[\r\n\]+$gdb_prompt $" {
# If the runtime was not built with enough debug information,
# or if it was stripped, we can not test exception
# catchpoints.
unsupported $msg
return -1
}
}
# Now, we can start the GDB/MI testing itself...
load_lib mi-support.exp
set MIFLAGS "-i=mi"
gdb_exit
if [mi_gdb_start] {
continue
}
#############################################
# 1. Try catching all exceptions handlers. #
#############################################
with_test_prefix "scenario 1" {
if ![mi_run_to_main] then {
fail "cannot run to main, testcase aborted"
return 0
}
}
mi_gdb_test "-catch-handlers" \
"\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"all Ada exceptions handlers\",.*}" \
"catch all exceptions handlers"
# Continue to exception handler.
proc continue_to_exception_handler { test line } {
global decimal
mi_send_resuming_command "exec-continue" "$test"
# Now MI stream output.
mi_expect_stop \
"breakpoint-hit\",disp=\"keep\",bkptno=\"$decimal\",exception-name=\"exception\"?" \
"foo" "" ".*" "$line" \
".*" \
$test
}
# We don't have the exception name info when stopping at the exception handlers
# catchpoints so we use source line to check if the inferior stops at the
# right location.
set bp_ce_location [gdb_get_line_number "BREAK1" ${testdir}/foo.adb]
continue_to_exception_handler \
"continue until CE handling caught by all-exceptions handlers catchpoint" \
"$bp_ce_location"
set bp_pe_location [gdb_get_line_number "BREAK2" ${testdir}/foo.adb]
continue_to_exception_handler \
"continue until PE handling caught by all-exceptions handlers catchpoint" \
"$bp_pe_location"
##########################################################
# 2. Try catching only some of the exceptions handlers. #
##########################################################
# Here is the scenario:
# - Restart the debugger from scratch, runto_main
# - We'll catch only "Constraint_Error handlers"
# - continue, we should stop at the Constraint_Error exception handler
# - continue, we should not stop at the Program_Error exception handler
# but exit instead.
with_test_prefix "scenario 2" {
if ![mi_run_to_main] then {
fail "cannot run to main, testcase aborted"
return 0
}
}
mi_gdb_test "-catch-handlers -e Constraint_Error" \
"\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",what=\"`Constraint_Error' Ada exception handlers\",.*}" \
"catch Constraint_Error"
mi_execute_to "exec-continue" \
"breakpoint-hit\",disp=\"keep\",bkptno=\"$decimal\",exception-name=\"exception\"?" \
"foo" "" ".*" "$bp_ce_location" \
".*" \
"continue to exception catchpoint hit"
# Exit the inferior.
mi_send_resuming_command "exec-continue" "continuing to inferior exit"
mi_expect_stop "exited-normally" "" "" "" "" "" "exit normally"
mi_gdb_exit
return 0
|