| """ |
| 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") |