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