1ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan""" 2ab8e00e51475b9148626bfdf99549b7ffc3d046dSean CallananSet the contents of variables and registers using raw data 3ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan""" 4ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 5ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callananimport os, time 6ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callananimport unittest2 7ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callananimport lldb 8ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callananfrom lldbtest import * 9ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callananimport lldbutil 10ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 11ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan@unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") 12ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callananclass SetDataTestCase(TestBase): 13ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 14ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan mydir = os.path.join("functionalities", "set-data") 15ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 16ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan @dsym_test 17ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan def test_set_data_dsym(self): 18ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan """Test setting the contents of variables and registers using raw data.""" 19ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.buildDsym() 20ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.setData() 21ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 22ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan def setData(self): 23ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan """Test setting objc breakpoints using '_regexp-break' and 'breakpoint set'.""" 24ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan exe = os.path.join(os.getcwd(), "a.out") 25ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) 26ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 27ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.runCmd("br s -p First"); 28ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.runCmd("br s -p Second"); 29ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 30ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.runCmd("run", RUN_SUCCEEDED) 31ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 32ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY, 33ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan substrs = ['2']) 34ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 35ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan process = self.dbg.GetSelectedTarget().GetProcess() 36ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan frame = process.GetSelectedThread().GetFrameAtIndex(0) 37ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 38ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan x = frame.FindVariable("myFoo").GetChildMemberWithName("x") 39ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 40ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan my_data = lldb.SBData.CreateDataFromSInt32Array(lldb.eByteOrderLittle, 8, [4]) 41ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan err = lldb.SBError() 42ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 43ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.assertTrue (x.SetData(my_data, err)) 44ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 45ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.runCmd("continue") 46ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 47ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.expect("p myFoo.x", VARIABLES_DISPLAYED_CORRECTLY, 48ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan substrs = ['4']) 49ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 50ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan frame = process.GetSelectedThread().GetFrameAtIndex(0) 51ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 52ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan x = frame.FindVariable("string") 53ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 54ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan if process.GetAddressByteSize() == 8: 55ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan my_data = lldb.SBData.CreateDataFromUInt64Array(process.GetByteOrder(), 8, [0]) 56ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan else: 57ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan my_data = lldb.SBData.CreateDataFromUInt32Array(process.GetByteOrder(), 4, [0]) 58ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 59ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan err = lldb.SBError() 60ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 61ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.assertTrue (x.SetData(my_data, err)) 62ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 63ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan self.expect("fr var -d run-target string", VARIABLES_DISPLAYED_CORRECTLY, 64ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan substrs = ['NSString *', 'nil']) 65ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan 66ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callananif __name__ == '__main__': 67ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan import atexit 68ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan lldb.SBDebugger.Initialize() 69ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan atexit.register(lambda: lldb.SBDebugger.Terminate()) 70ab8e00e51475b9148626bfdf99549b7ffc3d046dSean Callanan unittest2.main() 71