"""Test that SBFrame::FindValue finds things but does not duplicate the entire variables list""" import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class SBFrameFindValueTestCase(TestBase): NO_DEBUG_INFO_TESTCASE = True def test_formatters_api(self): """Test that SBFrame::FindValue finds things but does not duplicate the entire variables list""" self.build() self.setTearDownCleanup() exe = self.getBuildArtifact("a.out") # Create the target target = self.dbg.CreateTarget(exe) self.assertTrue(target, VALID_TARGET) # Set the breakpoints breakpoint = target.BreakpointCreateBySourceRegex( "Set breakpoint here", lldb.SBFileSpec("main.cpp") ) self.assertGreater(breakpoint.GetNumLocations(), 0, VALID_BREAKPOINT) # Launch the process, and do not stop at the entry point. process = target.LaunchSimple(None, None, self.get_process_working_directory()) self.assertTrue(process, PROCESS_IS_VALID) # Frame #0 should be at our breakpoint. threads = lldbutil.get_threads_stopped_at_breakpoint(process, breakpoint) self.assertEqual(len(threads), 1) self.thread = threads[0] self.frame = self.thread.frames[0] self.assertTrue(self.frame, "Frame 0 is valid.") self.assertEqual( self.frame.GetVariables(True, True, False, True).GetSize(), 2, "variable count is off", ) self.assertFalse( self.frame.FindValue( "NoSuchThing", lldb.eValueTypeVariableArgument, lldb.eDynamicCanRunTarget, ).IsValid(), "found something that should not be here", ) self.assertEqual( self.frame.GetVariables(True, True, False, True).GetSize(), 2, "variable count is off after failed FindValue()", ) self.assertTrue( self.frame.FindValue( "a", lldb.eValueTypeVariableArgument, lldb.eDynamicCanRunTarget ).IsValid(), "FindValue() didn't find an argument", ) self.assertEqual( self.frame.GetVariables(True, True, False, True).GetSize(), 2, "variable count is off after successful FindValue()", )