1"""Test that C++ global variables can be inspected by name and also their mangled name.""" 2 3 4 5from lldbsuite.test.decorators import * 6from lldbsuite.test.lldbtest import * 7from lldbsuite.test import lldbutil 8 9 10class GlobalVariablesCppTestCase(TestBase): 11 12 mydir = TestBase.compute_mydir(__file__) 13 14 def setUp(self): 15 TestBase.setUp(self) 16 self.source = lldb.SBFileSpec('main.cpp') 17 18 @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24764") 19 def test(self): 20 self.build() 21 22 (target, _, _, _) = lldbutil.run_to_source_breakpoint(self, "// Set break point at this line.", self.source) 23 24 # Check that we can access g_file_global_int by its name 25 self.expect("target variable g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY, 26 substrs=['42']) 27 self.expect("target variable abc::g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY, 28 substrs=['42']) 29 self.expect("target variable xyz::g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY, 30 error=True, substrs=['can\'t find global variable']) 31 32 # Check that we can access g_file_global_int by its mangled name 33 addr = target.EvaluateExpression("&abc::g_file_global_int").GetValueAsUnsigned() 34 self.assertNotEqual(addr, 0) 35 mangled = lldb.SBAddress(addr, target).GetSymbol().GetMangledName() 36 self.assertNotEqual(mangled, None) 37 gv = target.FindFirstGlobalVariable(mangled) 38 self.assertTrue(gv.IsValid()) 39 self.assertEqual(gv.GetName(), "abc::g_file_global_int") 40 self.assertEqual(gv.GetValueAsUnsigned(), 42) 41