TestHiddenIvars.py revision 21b1984e161b0cadee331d32bfd721eccfdf4b1f
1931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan"""Test that hidden ivars in a shared library are visible from the main executable.""" 2931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 3931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callananimport os, time 4931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callananimport unittest2 5931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callananimport lldb 6931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callananfrom lldbtest import * 7931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 8931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callananclass HiddenIvarsTestCase(TestBase): 9931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 10931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan mydir = os.path.join("lang", "objc", "hidden-ivars") 11931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 1221b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dsym_test 13931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def test_expr_with_dsym(self): 14931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.buildDsym() 15931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.expr() 16931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 1721b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dwarf_test 18931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def test_expr_with_dwarf(self): 19931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.buildDwarf() 20931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.expr() 21931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 2221b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dsym_test 23931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def test_frame_variable_with_dsym(self): 24931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.buildDsym() 25931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.frame_var() 26931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 2721b1984e161b0cadee331d32bfd721eccfdf4b1fJohnny Chen @dwarf_test 28931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def test_frame_variable_with_dwarf(self): 29931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.buildDwarf() 30931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.frame_var() 31931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 32931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def setUp(self): 33931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan # Call super's setUp(). 34931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan TestBase.setUp(self) 35931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan # Find the line number to break inside main(). 36931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.line = line_number('main.m', '// Set breakpoint 0 here.') 37931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 38931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def common_setup(self): 39931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan exe = os.path.join(os.getcwd(), "a.out") 40931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 41931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 42931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan # Break inside the foo function which takes a bar_ptr argument. 43931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.expect("breakpoint set -f main.m -l %d" % self.line, BREAKPOINT_CREATED, 44931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan startstr = "Breakpoint created") 45931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 46931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.runCmd("run", RUN_SUCCEEDED) 47931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 48931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan # The stop reason of the thread should be breakpoint. 49931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 50931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan substrs = ['stopped', 51931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 'stop reason = breakpoint']) 52931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 53931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan # The breakpoint should have a hit count of 1. 54931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE, 55931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan substrs = [' resolved, hit count = 1']) 56931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 57931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def expr(self): 58931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.common_setup() 59931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 60931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan # This should display correctly. 6178fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan self.expect("expression (j->_definer->bar)", VARIABLES_DISPLAYED_CORRECTLY, 6278fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan substrs = ["= 5"]) 63931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 6478fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan self.expect("expression *(j->_definer)", VARIABLES_DISPLAYED_CORRECTLY, 6578fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan substrs = ["foo = 0", "bar = 5"]) 66931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 67931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan def frame_var(self): 68931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan self.common_setup() 69931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 70931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan # This should display correctly. 7178fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan self.expect("frame variable j->_definer->bar", VARIABLES_DISPLAYED_CORRECTLY, 7278fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan substrs = ["= 5"]) 73931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 7478fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan self.expect("frame variable *j->_definer", VARIABLES_DISPLAYED_CORRECTLY, 7578fa6c9532efbfa344093320f5c85b17d46d0327Sean Callanan substrs = ["foo = 0", "bar = 5"]) 76931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 77931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callananif __name__ == '__main__': 78931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan import atexit 79931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan lldb.SBDebugger.Initialize() 80931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan atexit.register(lambda: lldb.SBDebugger.Terminate()) 81931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan unittest2.main() 82