1""" 2Test process attach. 3""" 4 5 6 7import os 8import lldb 9import shutil 10from lldbsuite.test.decorators import * 11from lldbsuite.test.lldbtest import * 12from lldbsuite.test import lldbutil 13 14exe_name = "ProcessAttach" # Must match Makefile 15 16 17class ProcessAttachTestCase(TestBase): 18 19 mydir = TestBase.compute_mydir(__file__) 20 21 NO_DEBUG_INFO_TESTCASE = True 22 23 @skipIfiOSSimulator 24 def test_attach_to_process_by_id(self): 25 """Test attach by process id""" 26 self.build() 27 exe = self.getBuildArtifact(exe_name) 28 29 # Spawn a new process 30 popen = self.spawnSubprocess(exe) 31 32 self.runCmd("process attach -p " + str(popen.pid)) 33 34 target = self.dbg.GetSelectedTarget() 35 36 process = target.GetProcess() 37 self.assertTrue(process, PROCESS_IS_VALID) 38 39 @skipIfReproducer # FIXME: Unexpected packet during (active) replay 40 def test_attach_to_process_from_different_dir_by_id(self): 41 """Test attach by process id""" 42 newdir = self.getBuildArtifact("newdir") 43 try: 44 os.mkdir(newdir) 45 except OSError as e: 46 if e.errno != os.errno.EEXIST: 47 raise 48 testdir = self.getBuildDir() 49 exe = os.path.join(newdir, 'proc_attach') 50 self.buildProgram('main.cpp', exe) 51 self.addTearDownHook(lambda: shutil.rmtree(newdir)) 52 53 # Spawn a new process 54 popen = self.spawnSubprocess(exe) 55 56 os.chdir(newdir) 57 self.addTearDownHook(lambda: os.chdir(testdir)) 58 self.runCmd("process attach -p " + str(popen.pid)) 59 60 target = self.dbg.GetSelectedTarget() 61 62 process = target.GetProcess() 63 self.assertTrue(process, PROCESS_IS_VALID) 64 65 def test_attach_to_process_by_name(self): 66 """Test attach by process name""" 67 self.build() 68 exe = self.getBuildArtifact(exe_name) 69 70 # Spawn a new process 71 popen = self.spawnSubprocess(exe) 72 73 self.runCmd("process attach -n " + exe_name) 74 75 target = self.dbg.GetSelectedTarget() 76 77 process = target.GetProcess() 78 self.assertTrue(process, PROCESS_IS_VALID) 79 80 def tearDown(self): 81 # Destroy process before TestBase.tearDown() 82 self.dbg.GetSelectedTarget().GetProcess().Destroy() 83 84 # Call super's tearDown(). 85 TestBase.tearDown(self) 86