199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest the iteration protocol for some lldb container objects. 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 LLDBIteratorTestCase(TestBase): 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprecht def setUp(self): 1799451b44SJordan Rupprecht # Call super's setUp(). 1899451b44SJordan Rupprecht TestBase.setUp(self) 1999451b44SJordan Rupprecht # Find the line numbers to break inside main(). 2099451b44SJordan Rupprecht self.line1 = line_number( 2199451b44SJordan Rupprecht 'main.cpp', '// Set break point at this line.') 2299451b44SJordan Rupprecht self.line2 = line_number('main.cpp', '// And that line.') 2399451b44SJordan Rupprecht 2499451b44SJordan Rupprecht def test_lldb_iter_module(self): 2599451b44SJordan Rupprecht """Test module_iter works correctly for SBTarget -> SBModule.""" 2699451b44SJordan Rupprecht self.build() 2799451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2899451b44SJordan Rupprecht 2999451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 3099451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line1) 3399451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 3499451b44SJordan Rupprecht 3599451b44SJordan Rupprecht # Now launch the process, and do not stop at entry point. 3699451b44SJordan Rupprecht process = target.LaunchSimple( 3799451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 3899451b44SJordan Rupprecht 3999451b44SJordan Rupprecht if not process: 4099451b44SJordan Rupprecht self.fail("SBTarget.LaunchProcess() failed") 4199451b44SJordan Rupprecht 4299451b44SJordan Rupprecht from lldbsuite.test.lldbutil import get_description 4399451b44SJordan Rupprecht yours = [] 4499451b44SJordan Rupprecht for i in range(target.GetNumModules()): 4599451b44SJordan Rupprecht yours.append(target.GetModuleAtIndex(i)) 4699451b44SJordan Rupprecht mine = [] 4799451b44SJordan Rupprecht for m in target.module_iter(): 4899451b44SJordan Rupprecht mine.append(m) 4999451b44SJordan Rupprecht 50619e2e09SDave Lee self.assertEqual(len(yours), len(mine)) 5199451b44SJordan Rupprecht for i in range(len(yours)): 5299451b44SJordan Rupprecht if self.TraceOn(): 5399451b44SJordan Rupprecht print("yours[%d]='%s'" % (i, get_description(yours[i]))) 5499451b44SJordan Rupprecht print("mine[%d]='%s'" % (i, get_description(mine[i]))) 550ed758b2SDave Lee self.assertEqual( 560ed758b2SDave Lee yours[i], mine[i], 5799451b44SJordan Rupprecht "UUID+FileSpec of yours[{0}] and mine[{0}] matches".format(i)) 5899451b44SJordan Rupprecht 5999451b44SJordan Rupprecht def test_lldb_iter_breakpoint(self): 6099451b44SJordan Rupprecht """Test breakpoint_iter works correctly for SBTarget -> SBBreakpoint.""" 6199451b44SJordan Rupprecht self.build() 6299451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 6399451b44SJordan Rupprecht 6499451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 6599451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 6699451b44SJordan Rupprecht 6799451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line1) 6899451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 6999451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line2) 7099451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 7199451b44SJordan Rupprecht 72619e2e09SDave Lee self.assertEqual(target.GetNumBreakpoints(), 2) 7399451b44SJordan Rupprecht 7499451b44SJordan Rupprecht from lldbsuite.test.lldbutil import get_description 7599451b44SJordan Rupprecht yours = [] 7699451b44SJordan Rupprecht for i in range(target.GetNumBreakpoints()): 7799451b44SJordan Rupprecht yours.append(target.GetBreakpointAtIndex(i)) 7899451b44SJordan Rupprecht mine = [] 7999451b44SJordan Rupprecht for b in target.breakpoint_iter(): 8099451b44SJordan Rupprecht mine.append(b) 8199451b44SJordan Rupprecht 82619e2e09SDave Lee self.assertEqual(len(yours), len(mine)) 8399451b44SJordan Rupprecht for i in range(len(yours)): 8499451b44SJordan Rupprecht if self.TraceOn(): 8599451b44SJordan Rupprecht print("yours[%d]='%s'" % (i, get_description(yours[i]))) 8699451b44SJordan Rupprecht print("mine[%d]='%s'" % (i, get_description(mine[i]))) 87619e2e09SDave Lee self.assertEqual(yours[i], mine[i], 8899451b44SJordan Rupprecht "ID of yours[{0}] and mine[{0}] matches".format(i)) 8999451b44SJordan Rupprecht 90*c2486011SStella Stamenova @skipIfWindows # This test is flaky on Windows 9199451b44SJordan Rupprecht def test_lldb_iter_frame(self): 9299451b44SJordan Rupprecht """Test iterator works correctly for SBProcess->SBThread->SBFrame.""" 9399451b44SJordan Rupprecht self.build() 9499451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 9599451b44SJordan Rupprecht 9699451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 9799451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 9899451b44SJordan Rupprecht 9999451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line1) 10099451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 10199451b44SJordan Rupprecht 10299451b44SJordan Rupprecht # Now launch the process, and do not stop at entry point. 10399451b44SJordan Rupprecht process = target.LaunchSimple( 10499451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 10599451b44SJordan Rupprecht 10699451b44SJordan Rupprecht if not process: 10799451b44SJordan Rupprecht self.fail("SBTarget.LaunchProcess() failed") 10899451b44SJordan Rupprecht 10999451b44SJordan Rupprecht from lldbsuite.test.lldbutil import print_stacktrace 11099451b44SJordan Rupprecht stopped_due_to_breakpoint = False 11199451b44SJordan Rupprecht for thread in process: 11299451b44SJordan Rupprecht if self.TraceOn(): 11399451b44SJordan Rupprecht print_stacktrace(thread) 11499451b44SJordan Rupprecht ID = thread.GetThreadID() 11599451b44SJordan Rupprecht if thread.GetStopReason() == lldb.eStopReasonBreakpoint: 11699451b44SJordan Rupprecht stopped_due_to_breakpoint = True 11799451b44SJordan Rupprecht for frame in thread: 118619e2e09SDave Lee self.assertEqual(frame.GetThread().GetThreadID(), ID) 11999451b44SJordan Rupprecht if self.TraceOn(): 12099451b44SJordan Rupprecht print(frame) 12199451b44SJordan Rupprecht 12299451b44SJordan Rupprecht self.assertTrue(stopped_due_to_breakpoint) 123