""" Test that we get the type code and subcode for MachExceptions """ import lldb import lldbsuite.test.lldbutil as lldbutil from lldbsuite.test.lldbtest import * from lldbsuite.test.decorators import * class TestMachExceptionData(TestBase): NO_DEBUG_INFO_TESTCASE = True @skipUnlessDarwin def test_exc_bad_access(self): """Test that we get type 1, code 1 and the right address for a EXC_BAD_ACCESS mach exception.""" self.build() self.main_source_file = lldb.SBFileSpec("main.c") (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint( self, "Set a breakpoint here", self.main_source_file ) # Now continue and we should crash: process.Continue() self.assertEqual( lldb.eStopReasonException, thread.GetStopReason(), "Got the right stop reason", ) self.assertEqual(thread.GetStopReasonDataCount(), 3, "Got all the codes") self.assertEqual(thread.stop_reason_data[0], 1, "1 is EXC_BAD_ACCESS") self.assertEqual(thread.stop_reason_data[1], 1, "1 is 'access invalid memory'") self.assertEqual(thread.stop_reason_data[2], 0x400, "That's the bad address")