This adds new types for setExceptionBreakpoints and adds support for `supportsExceptionFilterOptions`, which allows exception breakpoints to set a condition. While testing this, I noticed that obj-c exception catch breakpoints may not be working correctly in lldb-dap.
40 lines
1.7 KiB
Python
40 lines
1.7 KiB
Python
"""
|
|
Test lldb-dap setExceptionBreakpoints request
|
|
"""
|
|
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
import lldbdap_testcase
|
|
|
|
|
|
class TestDAP_setExceptionBreakpoints(lldbdap_testcase.DAPTestCaseBase):
|
|
@skipIfWindows
|
|
def test_functionality(self):
|
|
"""Tests setting and clearing exception breakpoints.
|
|
This packet is a bit tricky on the debug adapter side since there
|
|
is no "clear exception breakpoints" packet. Exception breakpoints
|
|
are set by sending a "setExceptionBreakpoints" packet with zero or
|
|
more exception filters. If exception breakpoints have been set
|
|
before, any existing breakpoints must remain set, and any new
|
|
breakpoints must be created, and any breakpoints that were in
|
|
previous requests and are not in the current request must be
|
|
removed. This exception tests this setting and clearing and makes
|
|
sure things happen correctly. It doesn't test hitting breakpoints
|
|
and the functionality of each breakpoint, like 'conditions' and
|
|
x'hitCondition' settings.
|
|
"""
|
|
# Visual Studio Code Debug Adapters have no way to specify the file
|
|
# without launching or attaching to a process, so we must start a
|
|
# process in order to be able to set breakpoints.
|
|
program = self.getBuildArtifact("a.out")
|
|
self.build_and_launch(program)
|
|
|
|
response = self.dap_server.request_setExceptionBreakpoints(
|
|
filters=["cpp_throw", "cpp_catch"],
|
|
)
|
|
if response:
|
|
self.assertTrue(response["success"])
|
|
|
|
self.continue_to_exception_breakpoint("C++ Throw")
|
|
self.continue_to_exception_breakpoint("C++ Catch")
|