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 @expectedFailureNetBSD 25 def test_attach_to_process_by_id(self): 26 """Test attach by process id""" 27 self.build() 28 exe = self.getBuildArtifact(exe_name) 29 30 # Spawn a new process 31 popen = self.spawnSubprocess(exe) 32 self.addTearDownHook(self.cleanupSubprocesses) 33 34 self.runCmd("process attach -p " + str(popen.pid)) 35 36 target = self.dbg.GetSelectedTarget() 37 38 process = target.GetProcess() 39 self.assertTrue(process, PROCESS_IS_VALID) 40 41 @expectedFailureNetBSD 42 @skipIfReproducer # Unexpected packet during replay 43 def test_attach_to_process_from_different_dir_by_id(self): 44 """Test attach by process id""" 45 newdir = self.getBuildArtifact("newdir") 46 try: 47 os.mkdir(newdir) 48 except OSError as e: 49 if e.errno != os.errno.EEXIST: 50 raise 51 testdir = self.getBuildDir() 52 exe = os.path.join(newdir, 'proc_attach') 53 self.buildProgram('main.cpp', exe) 54 self.addTearDownHook(lambda: shutil.rmtree(newdir)) 55 56 # Spawn a new process 57 popen = self.spawnSubprocess(exe) 58 self.addTearDownHook(self.cleanupSubprocesses) 59 60 os.chdir(newdir) 61 self.addTearDownHook(lambda: os.chdir(testdir)) 62 self.runCmd("process attach -p " + str(popen.pid)) 63 64 target = self.dbg.GetSelectedTarget() 65 66 process = target.GetProcess() 67 self.assertTrue(process, PROCESS_IS_VALID) 68 69 @expectedFailureNetBSD 70 def test_attach_to_process_by_name(self): 71 """Test attach by process name""" 72 self.build() 73 exe = self.getBuildArtifact(exe_name) 74 75 # Spawn a new process 76 popen = self.spawnSubprocess(exe) 77 self.addTearDownHook(self.cleanupSubprocesses) 78 79 self.runCmd("process attach -n " + exe_name) 80 81 target = self.dbg.GetSelectedTarget() 82 83 process = target.GetProcess() 84 self.assertTrue(process, PROCESS_IS_VALID) 85 86 def tearDown(self): 87 # Destroy process before TestBase.tearDown() 88 self.dbg.GetSelectedTarget().GetProcess().Destroy() 89 90 # Call super's tearDown(). 91 TestBase.tearDown(self) 92