diff options
author | Tom Tromey <tromey@adacore.com> | 2023-04-17 08:08:54 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2023-06-12 11:51:52 -0600 |
commit | 69ed07d5465e447c461bdc6b1f36b7b2575d7fe1 (patch) | |
tree | 7c85416c5606dba82e06e707e760527c1e95ef89 /gdb/testsuite | |
parent | 2c4c710f56990c169243702f0d7d3a7fecc5d090 (diff) | |
download | binutils-69ed07d5465e447c461bdc6b1f36b7b2575d7fe1.zip binutils-69ed07d5465e447c461bdc6b1f36b7b2575d7fe1.tar.gz binutils-69ed07d5465e447c461bdc6b1f36b7b2575d7fe1.tar.bz2 |
Implement DAP setExceptionBreakpoints request
This implements the DAP setExceptionBreakpoints request for Ada. This
is a somewhat minimal implementation, in that "exceptionOptions" are
not implemented (or advertised) -- I wasn't completely sure how this
feature is supposed to work.
I haven't added C++ exception handling here, but it's easy to do if
needed.
This patch relies on the new MI command execution support to do its
work.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/gdb.dap/catch-exception.exp | 65 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dap/catch-exception/pck.ads | 18 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dap/catch-exception/prog.adb | 44 |
3 files changed, 127 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.dap/catch-exception.exp b/gdb/testsuite/gdb.dap/catch-exception.exp new file mode 100644 index 0000000..6bfeb3e --- /dev/null +++ b/gdb/testsuite/gdb.dap/catch-exception.exp @@ -0,0 +1,65 @@ +# Copyright 2023 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 +load_lib dap-support.exp + +require allow_ada_tests allow_dap_tests gnat_runtime_has_debug_info + +standard_ada_testfile prog + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable \ + {debug additional_flags=-gnata}] != ""} { + return -1 +} + +if {[dap_launch $binfile] == ""} { + return +} + +set obj [dap_check_request_and_response "set exception catchpoints" \ + setExceptionBreakpoints \ + {o filters [a [s assert]] \ + filterOptions [a [o filterId [s exception] \ + condition [s "Global_Var = 23"]]]}] + +set bps [dict get [lindex $obj 0] body breakpoints] +gdb_assert {[llength $bps] == 2} "two breakpoints" + +# The "path" should never be "null". +set i 1 +foreach spec $bps { + # If "path" does not exist, then that is fine as well. + if {![dict exists $spec source path]} { + pass "breakpoint $i path" + } else { + gdb_assert {[dict get $spec source path] != "null"} \ + "breakpoint $i path" + } + incr i +} + +dap_check_request_and_response "start inferior" configurationDone + +dap_wait_for_event_and_check "stopped at first raise" stopped \ + "body reason" breakpoint \ + "body hitBreakpointIds" 2 + +dap_check_request_and_response "continue to assert" continue +dap_wait_for_event_and_check "stopped at assert" stopped \ + "body reason" breakpoint \ + "body hitBreakpointIds" 1 + +dap_shutdown diff --git a/gdb/testsuite/gdb.dap/catch-exception/pck.ads b/gdb/testsuite/gdb.dap/catch-exception/pck.ads new file mode 100644 index 0000000..e82a54f --- /dev/null +++ b/gdb/testsuite/gdb.dap/catch-exception/pck.ads @@ -0,0 +1,18 @@ +-- Copyright 2023 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 := 91; +end Pck; diff --git a/gdb/testsuite/gdb.dap/catch-exception/prog.adb b/gdb/testsuite/gdb.dap/catch-exception/prog.adb new file mode 100644 index 0000000..287eb24 --- /dev/null +++ b/gdb/testsuite/gdb.dap/catch-exception/prog.adb @@ -0,0 +1,44 @@ +-- Copyright 2023 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 Prog is +begin + + begin + raise Program_Error; + exception + when others => + null; + end; + + begin + Global_Var := 23; + raise Program_Error; + exception + when others => + null; + end; + + begin + pragma Assert (False); + null; + exception + when others => + null; + end; + +end Prog; |