199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest SBValue.GetObjectDescription() with the value from SBTarget.FindGlobalVariables(). 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprechtfrom __future__ import print_function 699451b44SJordan Rupprecht 799451b44SJordan Rupprecht 899451b44SJordan Rupprechtimport lldb 999451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 1099451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1199451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprechtclass ObjectDescriptionAPITestCase(TestBase): 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht def setUp(self): 1799451b44SJordan Rupprecht # Call super's setUp(). 1899451b44SJordan Rupprecht TestBase.setUp(self) 1999451b44SJordan Rupprecht # Find the line number to break at. 2099451b44SJordan Rupprecht self.source = 'main.m' 2199451b44SJordan Rupprecht self.line = line_number( 2299451b44SJordan Rupprecht self.source, '// Set break point at this line.') 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht # rdar://problem/10857337 2599451b44SJordan Rupprecht @add_test_categories(['pyapi']) 2699451b44SJordan Rupprecht def test_find_global_variables_then_object_description(self): 2799451b44SJordan Rupprecht """Exercise SBTarget.FindGlobalVariables() API.""" 2899451b44SJordan Rupprecht d = {'EXE': 'b.out'} 2999451b44SJordan Rupprecht self.build(dictionary=d) 3099451b44SJordan Rupprecht self.setTearDownCleanup(dictionary=d) 3199451b44SJordan Rupprecht exe = self.getBuildArtifact('b.out') 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht # Create a target by the debugger. 3499451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 3599451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation(self.source, self.line) 3899451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 3999451b44SJordan Rupprecht 4099451b44SJordan Rupprecht # Now launch the process, and do not stop at entry point. 4199451b44SJordan Rupprecht process = target.LaunchSimple( 4299451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 4399451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 4499451b44SJordan Rupprecht # Make sure we hit our breakpoint: 4599451b44SJordan Rupprecht thread_list = lldbutil.get_threads_stopped_at_breakpoint( 4699451b44SJordan Rupprecht process, breakpoint) 47*619e2e09SDave Lee self.assertEqual(len(thread_list), 1) 4899451b44SJordan Rupprecht 4999451b44SJordan Rupprecht thread = thread_list[0] 5099451b44SJordan Rupprecht frame0 = thread.GetFrameAtIndex(0) 5199451b44SJordan Rupprecht 5299451b44SJordan Rupprecht # Note my_global_str's object description prints fine here. 5399451b44SJordan Rupprecht value_list1 = frame0.GetVariables(True, True, True, True) 5499451b44SJordan Rupprecht for v in value_list1: 5599451b44SJordan Rupprecht self.DebugSBValue(v) 5699451b44SJordan Rupprecht if self.TraceOn(): 5799451b44SJordan Rupprecht print("val:", v) 5899451b44SJordan Rupprecht print("object description:", v.GetObjectDescription()) 5999451b44SJordan Rupprecht if v.GetName() == 'my_global_str': 60*619e2e09SDave Lee self.assertEqual(v.GetObjectDescription(), 6199451b44SJordan Rupprecht 'This is a global string') 6299451b44SJordan Rupprecht 6399451b44SJordan Rupprecht # But not here! 6499451b44SJordan Rupprecht value_list2 = target.FindGlobalVariables('my_global_str', 3) 6599451b44SJordan Rupprecht for v in value_list2: 6699451b44SJordan Rupprecht self.DebugSBValue(v) 6799451b44SJordan Rupprecht if self.TraceOn(): 6899451b44SJordan Rupprecht print("val:", v) 6999451b44SJordan Rupprecht print("object description:", v.GetObjectDescription()) 7099451b44SJordan Rupprecht if v.GetName() == 'my_global_str': 71*619e2e09SDave Lee self.assertEqual(v.GetObjectDescription(), 7299451b44SJordan Rupprecht 'This is a global string') 73