From 377912845e5f67e9d13aadbd226618bcac319781 Mon Sep 17 00:00:00 2001 From: Kuba Mracek Date: Mon, 12 Nov 2018 21:26:03 +0000 Subject: [lldb] Add synthetic frontend for _NSCallStackArray An Obj-C array type _NSCallStackArray is used in NSException backtraces. This patch adds a synthetic frontend for _NSCallStackArray, which now correctly returns frame PCs. Differential Revision: https://reviews.llvm.org/D44081 llvm-svn: 346708 --- .../test/lang/objc/exceptions/TestObjCExceptions.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'lldb/packages/Python/lldbsuite/test') diff --git a/lldb/packages/Python/lldbsuite/test/lang/objc/exceptions/TestObjCExceptions.py b/lldb/packages/Python/lldbsuite/test/lang/objc/exceptions/TestObjCExceptions.py index 423776cd115..8d260b235fc 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/objc/exceptions/TestObjCExceptions.py +++ b/lldb/packages/Python/lldbsuite/test/lang/objc/exceptions/TestObjCExceptions.py @@ -28,7 +28,8 @@ class ObjCExceptionsTestCase(TestBase): self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, substrs=['stopped', 'stop reason = breakpoint']) - thread = self.dbg.GetSelectedTarget().GetProcess().GetSelectedThread() + target = self.dbg.GetSelectedTarget() + thread = target.GetProcess().GetSelectedThread() frame = thread.GetSelectedFrame() self.expect( @@ -87,4 +88,13 @@ class ObjCExceptionsTestCase(TestBase): self.assertEqual(userInfo.summary, "1 key/value pair") self.assertEqual(userInfo.GetChildAtIndex(0).GetChildAtIndex(0).description, "some_key") self.assertEqual(userInfo.GetChildAtIndex(0).GetChildAtIndex(1).description, "some_value") - self.assertGreater(e2.GetChildMemberWithName("reserved").dynamic.num_children, 0) + reserved = e2.GetChildMemberWithName("reserved").dynamic + self.assertGreater(reserved.num_children, 0) + callStackReturnAddresses = [reserved.GetChildAtIndex(i).GetChildAtIndex(1) for i in range(0, reserved.GetNumChildren()) + if reserved.GetChildAtIndex(i).GetChildAtIndex(0).description == "callStackReturnAddresses"][0].dynamic + children = [callStackReturnAddresses.GetChildAtIndex(i) for i in range(0, callStackReturnAddresses.num_children)] + + pcs = [i.unsigned for i in children] + names = [target.ResolveSymbolContextForAddress(lldb.SBAddress(pc, target), lldb.eSymbolContextSymbol).GetSymbol().name for pc in pcs] + for n in ["objc_exception_throw", "foo", "main"]: + self.assertTrue(n in names, "%s is in the exception backtrace (%s)" % (n, names)) -- cgit v1.2.3