1import lldb 2from lldbsuite.test.decorators import * 3from lldbsuite.test.lldbtest import * 4from lldbsuite.test import lldbutil 5 6 7class TestCppIncompleteTypes(TestBase): 8 @skipIf(compiler="gcc") 9 def test_limit_debug_info(self): 10 self.build() 11 frame = self.get_test_frame("limit") 12 13 value_f = frame.EvaluateExpression("f") 14 self.assertTrue(value_f.IsValid(), "'expr f' results in a valid SBValue object") 15 self.assertSuccess(value_f.GetError(), "'expr f' is successful") 16 17 value_a = frame.EvaluateExpression("a") 18 self.assertTrue(value_a.IsValid(), "'expr a' results in a valid SBValue object") 19 self.assertSuccess(value_a.GetError(), "'expr a' is successful") 20 21 @skipIf(compiler="gcc") 22 # Clang on Windows asserts in external record layout in this case. 23 @skipIfWindows 24 def test_partial_limit_debug_info(self): 25 self.build() 26 frame = self.get_test_frame("nolimit") 27 28 value_f = frame.EvaluateExpression("f") 29 self.assertTrue(value_f.IsValid(), "'expr f' results in a valid SBValue object") 30 self.assertSuccess(value_f.GetError(), "'expr f' is successful") 31 32 value_a = frame.EvaluateExpression("a") 33 self.assertTrue(value_a.IsValid(), "'expr a' results in a valid SBValue object") 34 self.assertSuccess(value_a.GetError(), "'expr a' is successful") 35 36 def get_test_frame(self, exe): 37 # Get main source file 38 src_file = "main.cpp" 39 src_file_spec = lldb.SBFileSpec(src_file) 40 41 (target, process, thread, main_breakpoint) = lldbutil.run_to_source_breakpoint( 42 self, "break here", src_file_spec, exe_name=exe 43 ) 44 # Get frame for current thread 45 return thread.GetSelectedFrame() 46