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