| """Test that C++ global variables can be inspected by name and also their mangled name.""" |
| |
| from __future__ import print_function |
| |
| |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class GlobalVariablesCppTestCase(TestBase): |
| |
| mydir = TestBase.compute_mydir(__file__) |
| |
| def setUp(self): |
| TestBase.setUp(self) |
| self.source = lldb.SBFileSpec('main.cpp') |
| |
| @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24764") |
| def test(self): |
| self.build() |
| |
| (target, _, _, _) = lldbutil.run_to_source_breakpoint(self, "// Set break point at this line.", self.source) |
| |
| # Check that we can access g_file_global_int by its name |
| self.expect("target variable g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY, |
| substrs=['42']) |
| self.expect("target variable abc::g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY, |
| substrs=['42']) |
| self.expect("target variable xyz::g_file_global_int", VARIABLES_DISPLAYED_CORRECTLY, |
| error=True, substrs=['can\'t find global variable']) |
| |
| # Check that we can access g_file_global_int by its mangled name |
| addr = target.EvaluateExpression("&abc::g_file_global_int").GetValueAsUnsigned() |
| self.assertTrue(addr != 0) |
| mangled = lldb.SBAddress(addr, target).GetSymbol().GetMangledName() |
| self.assertTrue(mangled != None) |
| gv = target.FindFirstGlobalVariable(mangled) |
| self.assertTrue(gv.IsValid()) |
| self.assertEqual(gv.GetName(), "abc::g_file_global_int") |
| self.assertEqual(gv.GetValueAsUnsigned(), 42) |