199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest the iteration protocol for some lldb container objects. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprechtimport lldb 699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 899451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 999451b44SJordan Rupprecht 1099451b44SJordan Rupprecht 1199451b44SJordan Rupprechtclass LLDBIteratorTestCase(TestBase): 1299451b44SJordan Rupprecht def setUp(self): 1399451b44SJordan Rupprecht # Call super's setUp(). 1499451b44SJordan Rupprecht TestBase.setUp(self) 1599451b44SJordan Rupprecht # Find the line numbers to break inside main(). 16*2238dcc3SJonas Devlieghere self.line1 = line_number("main.cpp", "// Set break point at this line.") 17*2238dcc3SJonas Devlieghere self.line2 = line_number("main.cpp", "// And that line.") 1899451b44SJordan Rupprecht 1999451b44SJordan Rupprecht def test_lldb_iter_module(self): 2099451b44SJordan Rupprecht """Test module_iter works correctly for SBTarget -> SBModule.""" 2199451b44SJordan Rupprecht self.build() 2299451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 2599451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 2699451b44SJordan Rupprecht 2799451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line1) 2899451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 2999451b44SJordan Rupprecht 3099451b44SJordan Rupprecht # Now launch the process, and do not stop at entry point. 31*2238dcc3SJonas Devlieghere process = target.LaunchSimple(None, None, self.get_process_working_directory()) 3299451b44SJordan Rupprecht 3399451b44SJordan Rupprecht if not process: 3499451b44SJordan Rupprecht self.fail("SBTarget.LaunchProcess() failed") 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht from lldbsuite.test.lldbutil import get_description 37*2238dcc3SJonas Devlieghere 3899451b44SJordan Rupprecht yours = [] 3999451b44SJordan Rupprecht for i in range(target.GetNumModules()): 4099451b44SJordan Rupprecht yours.append(target.GetModuleAtIndex(i)) 4199451b44SJordan Rupprecht mine = [] 4299451b44SJordan Rupprecht for m in target.module_iter(): 4399451b44SJordan Rupprecht mine.append(m) 4499451b44SJordan Rupprecht 45619e2e09SDave Lee self.assertEqual(len(yours), len(mine)) 4699451b44SJordan Rupprecht for i in range(len(yours)): 4799451b44SJordan Rupprecht if self.TraceOn(): 4899451b44SJordan Rupprecht print("yours[%d]='%s'" % (i, get_description(yours[i]))) 4999451b44SJordan Rupprecht print("mine[%d]='%s'" % (i, get_description(mine[i]))) 500ed758b2SDave Lee self.assertEqual( 51*2238dcc3SJonas Devlieghere yours[i], 52*2238dcc3SJonas Devlieghere mine[i], 53*2238dcc3SJonas Devlieghere "UUID+FileSpec of yours[{0}] and mine[{0}] matches".format(i), 54*2238dcc3SJonas Devlieghere ) 5599451b44SJordan Rupprecht 5699451b44SJordan Rupprecht def test_lldb_iter_breakpoint(self): 5799451b44SJordan Rupprecht """Test breakpoint_iter works correctly for SBTarget -> SBBreakpoint.""" 5899451b44SJordan Rupprecht self.build() 5999451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 6099451b44SJordan Rupprecht 6199451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 6299451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 6399451b44SJordan Rupprecht 6499451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line1) 6599451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 6699451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line2) 6799451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 6899451b44SJordan Rupprecht 69619e2e09SDave Lee self.assertEqual(target.GetNumBreakpoints(), 2) 7099451b44SJordan Rupprecht 7199451b44SJordan Rupprecht from lldbsuite.test.lldbutil import get_description 72*2238dcc3SJonas Devlieghere 7399451b44SJordan Rupprecht yours = [] 7499451b44SJordan Rupprecht for i in range(target.GetNumBreakpoints()): 7599451b44SJordan Rupprecht yours.append(target.GetBreakpointAtIndex(i)) 7699451b44SJordan Rupprecht mine = [] 7799451b44SJordan Rupprecht for b in target.breakpoint_iter(): 7899451b44SJordan Rupprecht mine.append(b) 7999451b44SJordan Rupprecht 80619e2e09SDave Lee self.assertEqual(len(yours), len(mine)) 8199451b44SJordan Rupprecht for i in range(len(yours)): 8299451b44SJordan Rupprecht if self.TraceOn(): 8399451b44SJordan Rupprecht print("yours[%d]='%s'" % (i, get_description(yours[i]))) 8499451b44SJordan Rupprecht print("mine[%d]='%s'" % (i, get_description(mine[i]))) 85*2238dcc3SJonas Devlieghere self.assertEqual( 86*2238dcc3SJonas Devlieghere yours[i], mine[i], "ID of yours[{0}] and mine[{0}] matches".format(i) 87*2238dcc3SJonas Devlieghere ) 8899451b44SJordan Rupprecht 89c2486011SStella Stamenova @skipIfWindows # This test is flaky on Windows 9099451b44SJordan Rupprecht def test_lldb_iter_frame(self): 9199451b44SJordan Rupprecht """Test iterator works correctly for SBProcess->SBThread->SBFrame.""" 9299451b44SJordan Rupprecht self.build() 9399451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 9499451b44SJordan Rupprecht 9599451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 9699451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 9799451b44SJordan Rupprecht 9899451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line1) 9999451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 10099451b44SJordan Rupprecht 10199451b44SJordan Rupprecht # Now launch the process, and do not stop at entry point. 102*2238dcc3SJonas Devlieghere process = target.LaunchSimple(None, None, self.get_process_working_directory()) 10399451b44SJordan Rupprecht 10499451b44SJordan Rupprecht if not process: 10599451b44SJordan Rupprecht self.fail("SBTarget.LaunchProcess() failed") 10699451b44SJordan Rupprecht 10799451b44SJordan Rupprecht from lldbsuite.test.lldbutil import print_stacktrace 108*2238dcc3SJonas Devlieghere 10999451b44SJordan Rupprecht stopped_due_to_breakpoint = False 11099451b44SJordan Rupprecht for thread in process: 11199451b44SJordan Rupprecht if self.TraceOn(): 11299451b44SJordan Rupprecht print_stacktrace(thread) 11399451b44SJordan Rupprecht ID = thread.GetThreadID() 11499451b44SJordan Rupprecht if thread.GetStopReason() == lldb.eStopReasonBreakpoint: 11599451b44SJordan Rupprecht stopped_due_to_breakpoint = True 11699451b44SJordan Rupprecht for frame in thread: 117619e2e09SDave Lee self.assertEqual(frame.GetThread().GetThreadID(), ID) 11899451b44SJordan Rupprecht if self.TraceOn(): 11999451b44SJordan Rupprecht print(frame) 12099451b44SJordan Rupprecht 12199451b44SJordan Rupprecht self.assertTrue(stopped_due_to_breakpoint) 122