TestRegistersIterator.py revision 6bc4dcdfbcdfa455299d2123011b82a77351ee72
1""" 2Test the iteration protocol for frame registers. 3""" 4 5import os, time 6import re 7import unittest2 8import lldb 9from lldbtest import * 10 11class RegistersIteratorTestCase(TestBase): 12 13 mydir = os.path.join("python_api", "lldbutil", "iter") 14 15 def setUp(self): 16 # Call super's setUp(). 17 TestBase.setUp(self) 18 # Find the line number to break inside main(). 19 self.line1 = line_number('main.cpp', '// Set break point at this line.') 20 21 @expectedFailureLinux # llvm.org/pr14600 - Exception state registers not supported on Linux 22 @python_api_test 23 def test_iter_registers(self): 24 """Test iterator works correctly for lldbutil.iter_registers().""" 25 self.buildDefault() 26 self.iter_registers() 27 28 def iter_registers(self): 29 exe = os.path.join(os.getcwd(), "a.out") 30 31 target = self.dbg.CreateTarget(exe) 32 self.assertTrue(target, VALID_TARGET) 33 34 breakpoint = target.BreakpointCreateByLocation("main.cpp", self.line1) 35 self.assertTrue(breakpoint, VALID_BREAKPOINT) 36 37 # Now launch the process, and do not stop at entry point. 38 process = target.LaunchSimple(None, None, os.getcwd()) 39 40 if not process: 41 self.fail("SBTarget.LaunchProcess() failed") 42 43 import lldbutil 44 for thread in process: 45 if thread.GetStopReason() == lldb.eStopReasonBreakpoint: 46 for frame in thread: 47 # Dump the registers of this frame using lldbutil.get_GPRs() and friends. 48 if self.TraceOn(): 49 print frame 50 51 REGs = lldbutil.get_GPRs(frame) 52 num = len(REGs) 53 if self.TraceOn(): 54 print "\nNumber of general purpose registers: %d" % num 55 for reg in REGs: 56 self.assertTrue(reg) 57 if self.TraceOn(): 58 print "%s => %s" % (reg.GetName(), reg.GetValue()) 59 60 REGs = lldbutil.get_FPRs(frame) 61 num = len(REGs) 62 if self.TraceOn(): 63 print "\nNumber of floating point registers: %d" % num 64 for reg in REGs: 65 self.assertTrue(reg) 66 if self.TraceOn(): 67 print "%s => %s" % (reg.GetName(), reg.GetValue()) 68 69 REGs = lldbutil.get_ESRs(frame) 70 num = len(REGs) 71 if self.TraceOn(): 72 print "\nNumber of exception state registers: %d" % num 73 for reg in REGs: 74 self.assertTrue(reg) 75 if self.TraceOn(): 76 print "%s => %s" % (reg.GetName(), reg.GetValue()) 77 78 # And these should also work. 79 for kind in ["General Purpose Registers", 80 "Floating Point Registers", 81 "Exception State Registers"]: 82 REGs = lldbutil.get_registers(frame, kind) 83 self.assertTrue(REGs) 84 85 # We've finished dumping the registers for frame #0. 86 break 87 88 89if __name__ == '__main__': 90 import atexit 91 lldb.SBDebugger.Initialize() 92 atexit.register(lambda: lldb.SBDebugger.Terminate()) 93 unittest2.main() 94