(Ada/MI) Add testcase for mi catch assert with condition
gdb/testsuite/ChangeLog:
* gdb.ada/mi_catch_assert.exp: New testcase.
* gdb.ada/mi_catch_assert/bla.adb: New file.
* gdb.ada/mi_catch_assert/pck.ads: New file.
Tested on x86_64-linux.
This commit is contained in:
parent
395507f62b
commit
4fa955b25e
96
gdb/testsuite/gdb.ada/mi_catch_assert.exp
Normal file
96
gdb/testsuite/gdb.ada/mi_catch_assert.exp
Normal file
@ -0,0 +1,96 @@
|
||||
# Copyright 2011-2018 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"
|
||||
|
||||
standard_ada_testfile bla
|
||||
|
||||
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
|
||||
return -1
|
||||
}
|
||||
|
||||
# Some global variables used to simplify the maintenance of some of
|
||||
# the regular expressions below.
|
||||
set eol "\[\r\n\]+"
|
||||
set sp "\[ \t\]*"
|
||||
|
||||
# Before going any further, verify that we can insert exception
|
||||
# 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"
|
||||
gdb_test_multiple "catch exception" $msg {
|
||||
-re "Catchpoint $decimal: all Ada exceptions$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
|
||||
}
|
||||
|
||||
mi_delete_breakpoints
|
||||
mi_gdb_reinitialize_dir $srcdir/$subdir
|
||||
mi_gdb_load ${binfile}
|
||||
|
||||
###################################################
|
||||
# 2. Try catching conditionnal failed assertion. #
|
||||
###################################################
|
||||
|
||||
# Here is the scenario:
|
||||
# - Restart the debugger from scratch, runto_main
|
||||
# We'll catch assertions if Global_Var = 2
|
||||
# - continue, we should see the second failed assertion
|
||||
# - continue, the program exits.
|
||||
|
||||
if ![mi_run_to_main] then {
|
||||
fail "cannot run to main, testcase aborted"
|
||||
return 0
|
||||
}
|
||||
|
||||
mi_gdb_test "-catch-assert -c \"Global_Var = 2\"" \
|
||||
"\\^done,bkptno=\"$decimal\",bkpt={.*disp=\"keep\",enabled=\"y\",addr=\"$hex\",what=\"failed Ada assertions\",.*,cond=\"Global_Var = 2\",.*}" \
|
||||
"catch assert failures with condition"
|
||||
|
||||
set bp_location [gdb_get_line_number "STOP" ${testdir}/bla.adb]
|
||||
mi_execute_to "exec-continue" \
|
||||
"breakpoint-hit\",disp=\"keep\",bkptno=\"$decimal" \
|
||||
"bla" "" ".*" "$bp_location" \
|
||||
".*" \
|
||||
"continue to assert failure catchpoint hit"
|
||||
|
||||
# Exit the inferior.
|
||||
mi_send_resuming_command "exec-continue" "continuing to inferior exit"
|
||||
mi_expect_stop "exited-normally" "" "" "" "" "" "exit normally"
|
||||
46
gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb
Normal file
46
gdb/testsuite/gdb.ada/mi_catch_assert/bla.adb
Normal file
@ -0,0 +1,46 @@
|
||||
-- Copyright 2018 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/>.
|
||||
|
||||
with Pck; use Pck;
|
||||
|
||||
procedure Bla is
|
||||
begin
|
||||
Global_Var := 1;
|
||||
declare
|
||||
begin
|
||||
pragma Assert (Global_Var /= 1, "Error #1");
|
||||
exception
|
||||
when others =>
|
||||
null;
|
||||
end;
|
||||
|
||||
Global_Var := 2;
|
||||
declare
|
||||
begin
|
||||
pragma Assert (Global_Var = 1, "Error #2"); -- STOP
|
||||
exception
|
||||
when others =>
|
||||
null;
|
||||
end;
|
||||
|
||||
Global_Var := 3;
|
||||
declare
|
||||
begin
|
||||
pragma Assert (Global_Var = 2, "Error #3");
|
||||
exception
|
||||
when others =>
|
||||
null;
|
||||
end;
|
||||
end Bla;
|
||||
19
gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads
Normal file
19
gdb/testsuite/gdb.ada/mi_catch_assert/pck.ads
Normal file
@ -0,0 +1,19 @@
|
||||
-- Copyright 2018 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/>.
|
||||
|
||||
package Pck is
|
||||
Global_Var : Integer := 0;
|
||||
end Pck;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user