51 lines · python
1import lldb2from lldbsuite.test.decorators import *3from lldbsuite.test.lldbtest import *4from lldbsuite.test import lldbutil5 6 7class ValueAPIEmptyClassTestCase(TestBase):8 def test(self):9 self.build()10 exe = self.getBuildArtifact("a.out")11 line = line_number("main.cpp", "// Break at this line")12 13 # Create a target by the debugger.14 target = self.dbg.CreateTarget(exe)15 self.assertTrue(target, VALID_TARGET)16 17 # Create the breakpoint inside function 'main'.18 breakpoint = target.BreakpointCreateByLocation("main.cpp", line)19 self.assertTrue(breakpoint, VALID_BREAKPOINT)20 21 # Now launch the process, and do not stop at entry point.22 process = target.LaunchSimple(None, None, self.get_process_working_directory())23 self.assertTrue(process, PROCESS_IS_VALID)24 25 # Get Frame #0.26 self.assertState(process.GetState(), lldb.eStateStopped)27 thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint)28 self.assertTrue(29 thread.IsValid(),30 "There should be a thread stopped due to breakpoint condition",31 )32 frame0 = thread.GetFrameAtIndex(0)33 34 # Verify that we can access to a frame variable with an empty class type35 e = frame0.FindVariable("e")36 self.assertTrue(e.IsValid(), VALID_VARIABLE)37 self.DebugSBValue(e)38 self.assertEqual(e.GetNumChildren(), 0)39 40 # Verify that we can acces to a frame variable what is a pointer to an41 # empty class42 ep = frame0.FindVariable("ep")43 self.assertTrue(ep.IsValid(), VALID_VARIABLE)44 self.DebugSBValue(ep)45 46 # Verify that we can dereference a pointer to an empty class47 epd = ep.Dereference()48 self.assertTrue(epd.IsValid(), VALID_VARIABLE)49 self.DebugSBValue(epd)50 self.assertEqual(epd.GetNumChildren(), 0)51