199451b44SJordan Rupprecht"""Test that SBFrame::FindValue finds things but does not duplicate the entire variables list""" 299451b44SJordan Rupprecht 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 SBFrameFindValueTestCase(TestBase): 1299451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprecht def test_formatters_api(self): 1599451b44SJordan Rupprecht """Test that SBFrame::FindValue finds things but does not duplicate the entire variables list""" 1699451b44SJordan Rupprecht self.build() 1799451b44SJordan Rupprecht self.setTearDownCleanup() 1899451b44SJordan Rupprecht 1999451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2099451b44SJordan Rupprecht 2199451b44SJordan Rupprecht # Create the target 2299451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 2399451b44SJordan Rupprecht self.assertTrue(target, VALID_TARGET) 2499451b44SJordan Rupprecht 2599451b44SJordan Rupprecht # Set the breakpoints 2699451b44SJordan Rupprecht breakpoint = target.BreakpointCreateBySourceRegex( 2799451b44SJordan Rupprecht 'Set breakpoint here', lldb.SBFileSpec("main.cpp")) 2899451b44SJordan Rupprecht self.assertTrue(breakpoint.GetNumLocations() > 0, VALID_BREAKPOINT) 2999451b44SJordan Rupprecht 3099451b44SJordan Rupprecht # Launch the process, and do not stop at the entry point. 3199451b44SJordan Rupprecht process = target.LaunchSimple( 3299451b44SJordan Rupprecht None, None, self.get_process_working_directory()) 3399451b44SJordan Rupprecht 3499451b44SJordan Rupprecht self.assertTrue(process, PROCESS_IS_VALID) 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht # Frame #0 should be at our breakpoint. 3799451b44SJordan Rupprecht threads = lldbutil.get_threads_stopped_at_breakpoint( 3899451b44SJordan Rupprecht process, breakpoint) 3999451b44SJordan Rupprecht 40*b3a0c4d7SRaphael Isemann self.assertEquals(len(threads), 1) 4199451b44SJordan Rupprecht self.thread = threads[0] 4299451b44SJordan Rupprecht self.frame = self.thread.frames[0] 4399451b44SJordan Rupprecht self.assertTrue(self.frame, "Frame 0 is valid.") 4499451b44SJordan Rupprecht 4599451b44SJordan Rupprecht self.assertTrue( 4699451b44SJordan Rupprecht self.frame.GetVariables( 4799451b44SJordan Rupprecht True, 4899451b44SJordan Rupprecht True, 4999451b44SJordan Rupprecht False, 5099451b44SJordan Rupprecht True).GetSize() == 2, 5199451b44SJordan Rupprecht "variable count is off") 5299451b44SJordan Rupprecht self.assertFalse( 5399451b44SJordan Rupprecht self.frame.FindValue( 5499451b44SJordan Rupprecht "NoSuchThing", 5599451b44SJordan Rupprecht lldb.eValueTypeVariableArgument, 5699451b44SJordan Rupprecht lldb.eDynamicCanRunTarget).IsValid(), 5799451b44SJordan Rupprecht "found something that should not be here") 5899451b44SJordan Rupprecht self.assertTrue( 5999451b44SJordan Rupprecht self.frame.GetVariables( 6099451b44SJordan Rupprecht True, 6199451b44SJordan Rupprecht True, 6299451b44SJordan Rupprecht False, 6399451b44SJordan Rupprecht True).GetSize() == 2, 6499451b44SJordan Rupprecht "variable count is off after failed FindValue()") 6599451b44SJordan Rupprecht self.assertTrue( 6699451b44SJordan Rupprecht self.frame.FindValue( 6799451b44SJordan Rupprecht "a", 6899451b44SJordan Rupprecht lldb.eValueTypeVariableArgument, 6999451b44SJordan Rupprecht lldb.eDynamicCanRunTarget).IsValid(), 7099451b44SJordan Rupprecht "FindValue() didn't find an argument") 7199451b44SJordan Rupprecht self.assertTrue( 7299451b44SJordan Rupprecht self.frame.GetVariables( 7399451b44SJordan Rupprecht True, 7499451b44SJordan Rupprecht True, 7599451b44SJordan Rupprecht False, 7699451b44SJordan Rupprecht True).GetSize() == 2, 7799451b44SJordan Rupprecht "variable count is off after successful FindValue()") 78