WebAssembly inferiors are built with -fno-exceptions and run on a wasip1 runtime with no exec/fork/setpgid, no setjmp/longjmp (needs the exception-handling proposal), no memory-protection faults/signals, and no _Float16/__bf16 support. Mark the corresponding API tests as skipped on wasm so they report unsupported instead of failing to build or run.
91 lines
3.0 KiB
Python
91 lines
3.0 KiB
Python
"""
|
|
Test that you can set breakpoint and hit the C++ language exception breakpoint
|
|
"""
|
|
|
|
|
|
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
|
|
@skipIfWasm # wasm inferiors are built with -fno-exceptions
|
|
class TestCPPExceptionBreakpoint(TestBase):
|
|
my_var = 10
|
|
|
|
@add_test_categories(["pyapi"])
|
|
@expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24538")
|
|
def test_cpp_exception_breakpoint(self):
|
|
"""Test setting and hitting the C++ exception breakpoint."""
|
|
self.build()
|
|
self.do_cpp_exception_bkpt()
|
|
|
|
@add_test_categories(["pyapi"])
|
|
@expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24538")
|
|
def test_dummy_target_cpp_exception_breakpoint(self):
|
|
"""Test setting and hitting the C++ exception breakpoint from dummy target."""
|
|
self.build()
|
|
self.do_dummy_target_cpp_exception_bkpt()
|
|
|
|
def setUp(self):
|
|
TestBase.setUp(self)
|
|
self.main_source = "main.c"
|
|
self.main_source_spec = lldb.SBFileSpec(self.main_source)
|
|
|
|
def do_cpp_exception_bkpt(self):
|
|
exe = self.getBuildArtifact("a.out")
|
|
error = lldb.SBError()
|
|
|
|
self.target = self.dbg.CreateTarget(exe)
|
|
self.assertTrue(self.target, VALID_TARGET)
|
|
|
|
exception_bkpt = self.target.BreakpointCreateForException(
|
|
lldb.eLanguageTypeC_plus_plus, False, True
|
|
)
|
|
self.assertTrue(exception_bkpt.IsValid(), "Created exception breakpoint.")
|
|
|
|
process = self.target.LaunchSimple(
|
|
None, None, self.get_process_working_directory()
|
|
)
|
|
self.assertTrue(process, PROCESS_IS_VALID)
|
|
|
|
thread_list = lldbutil.get_threads_stopped_at_breakpoint(
|
|
process, exception_bkpt
|
|
)
|
|
self.assertEqual(
|
|
len(thread_list), 1, "One thread stopped at the exception breakpoint."
|
|
)
|
|
|
|
def do_dummy_target_cpp_exception_bkpt(self):
|
|
exe = self.getBuildArtifact("a.out")
|
|
error = lldb.SBError()
|
|
|
|
dummy_exception_bkpt = self.dbg.GetDummyTarget().BreakpointCreateForException(
|
|
lldb.eLanguageTypeC_plus_plus, False, True
|
|
)
|
|
self.assertTrue(
|
|
dummy_exception_bkpt.IsValid(),
|
|
"Created exception breakpoint in dummy target.",
|
|
)
|
|
|
|
self.target = self.dbg.CreateTarget(exe)
|
|
self.assertTrue(self.target, VALID_TARGET)
|
|
|
|
exception_bkpt = self.target.GetBreakpointAtIndex(0)
|
|
self.assertTrue(
|
|
exception_bkpt.IsValid(),
|
|
"Target primed with exception breakpoint from dummy target.",
|
|
)
|
|
|
|
process = self.target.LaunchSimple(
|
|
None, None, self.get_process_working_directory()
|
|
)
|
|
self.assertTrue(process, PROCESS_IS_VALID)
|
|
|
|
thread_list = lldbutil.get_threads_stopped_at_breakpoint(
|
|
process, exception_bkpt
|
|
)
|
|
self.assertEqual(
|
|
len(thread_list), 1, "One thread stopped at the exception breakpoint."
|
|
)
|