199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest utility functions for the frame object. 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 FrameUtilsTestCase(TestBase): 1299451b44SJordan Rupprecht def setUp(self): 1399451b44SJordan Rupprecht # Call super's setUp(). 1499451b44SJordan Rupprecht TestBase.setUp(self) 1599451b44SJordan Rupprecht # Find the line number to break inside main(). 16*2238dcc3SJonas Devlieghere self.line = line_number("main.c", "// Find the line number here.") 1799451b44SJordan Rupprecht 1899451b44SJordan Rupprecht def test_frame_utils(self): 1999451b44SJordan Rupprecht """Test utility functions for the frame object.""" 2099451b44SJordan Rupprecht self.build() 2199451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2299451b44SJordan Rupprecht 2399451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 2499451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 2599451b44SJordan Rupprecht 2699451b44SJordan Rupprecht breakpoint = target.BreakpointCreateByLocation("main.c", self.line) 2799451b44SJordan Rupprecht self.assertTrue(breakpoint, VALID_BREAKPOINT) 2899451b44SJordan Rupprecht 2999451b44SJordan Rupprecht # Now launch the process, and do not stop at entry point. 30*2238dcc3SJonas Devlieghere process = target.LaunchSimple(None, None, self.get_process_working_directory()) 3199451b44SJordan Rupprecht 3299451b44SJordan Rupprecht if not process: 3399451b44SJordan Rupprecht self.fail("SBTarget.LaunchProcess() failed") 34*2238dcc3SJonas Devlieghere self.assertState(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED) 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht import lldbsuite.test.lldbutil as lldbutil 37*2238dcc3SJonas Devlieghere 38*2238dcc3SJonas Devlieghere thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint) 3999451b44SJordan Rupprecht self.assertTrue(thread) 4099451b44SJordan Rupprecht frame0 = thread.GetFrameAtIndex(0) 4199451b44SJordan Rupprecht self.assertTrue(frame0) 4299451b44SJordan Rupprecht frame1 = thread.GetFrameAtIndex(1) 4399451b44SJordan Rupprecht self.assertTrue(frame1) 4499451b44SJordan Rupprecht parent = lldbutil.get_parent_frame(frame0) 4599451b44SJordan Rupprecht self.assertTrue(parent and parent.GetFrameID() == frame1.GetFrameID()) 4699451b44SJordan Rupprecht frame0_args = lldbutil.get_args_as_string(frame0) 4799451b44SJordan Rupprecht parent_args = lldbutil.get_args_as_string(parent) 48*2238dcc3SJonas Devlieghere self.assertTrue(frame0_args and parent_args and "(int)val=1" in frame0_args) 4999451b44SJordan Rupprecht if self.TraceOn(): 5099451b44SJordan Rupprecht lldbutil.print_stacktrace(thread) 5199451b44SJordan Rupprecht print("Current frame: %s" % frame0_args) 5299451b44SJordan Rupprecht print("Parent frame: %s" % parent_args) 53