1import lldb 2from lldbsuite.test.lldbtest import * 3import lldbsuite.test.lldbutil as lldbutil 4 5 6class TestUnionMembers(TestBase): 7 8 def test_union_members(self): 9 self._load_exe() 10 11 # Set breakpoints 12 bp = self.target.BreakpointCreateBySourceRegex( 13 "Break here", self.src_file_spec) 14 self.assertTrue( 15 bp.IsValid() and bp.GetNumLocations() >= 1, 16 VALID_BREAKPOINT) 17 18 # Launch the process 19 self.process = self.target.LaunchSimple( 20 None, None, self.get_process_working_directory()) 21 self.assertTrue(self.process.IsValid(), PROCESS_IS_VALID) 22 self.assertEqual( 23 self.process.GetState(), lldb.eStateStopped, 24 PROCESS_STOPPED) 25 26 thread = lldbutil.get_stopped_thread( 27 self.process, lldb.eStopReasonBreakpoint) 28 self.assertTrue(thread.IsValid()) 29 frame = thread.GetSelectedFrame() 30 self.assertTrue(frame.IsValid()) 31 32 val = frame.EvaluateExpression("u") 33 self.assertTrue(val.IsValid()) 34 val = frame.EvaluateExpression("u.s") 35 self.assertTrue(val.IsValid()) 36 self.assertEqual(val.GetNumChildren(), 2) 37 38 def _load_exe(self): 39 self.build() 40 41 src_file = os.path.join(self.getSourceDir(), "main.c") 42 self.src_file_spec = lldb.SBFileSpec(src_file) 43 self.assertTrue(self.src_file_spec.IsValid(), "breakpoint file") 44 45 # Get the path of the executable 46 exe_path = self.getBuildArtifact("a.out") 47 48 # Load the executable 49 self.target = self.dbg.CreateTarget(exe_path) 50 self.assertTrue(self.target.IsValid(), VALID_TARGET) 51