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 33 self.runCmd("process attach -p " + str(popen.pid)) 34 35 target = self.dbg.GetSelectedTarget() 36 37 process = target.GetProcess() 38 self.assertTrue(process, PROCESS_IS_VALID) 39 40 @expectedFailureNetBSD 41 @skipIfReproducer # FIXME: Unexpected packet during (active) replay 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 58 os.chdir(newdir) 59 self.addTearDownHook(lambda: os.chdir(testdir)) 60 self.runCmd("process attach -p " + str(popen.pid)) 61 62 target = self.dbg.GetSelectedTarget() 63 64 process = target.GetProcess() 65 self.assertTrue(process, PROCESS_IS_VALID) 66 67 @expectedFailureNetBSD 68 def test_attach_to_process_by_name(self): 69 """Test attach by process name""" 70 self.build() 71 exe = self.getBuildArtifact(exe_name) 72 73 # Spawn a new process 74 popen = self.spawnSubprocess(exe) 75 76 self.runCmd("process attach -n " + exe_name) 77 78 target = self.dbg.GetSelectedTarget() 79 80 process = target.GetProcess() 81 self.assertTrue(process, PROCESS_IS_VALID) 82 83 def tearDown(self): 84 # Destroy process before TestBase.tearDown() 85 self.dbg.GetSelectedTarget().GetProcess().Destroy() 86 87 # Call super's tearDown(). 88 TestBase.tearDown(self) 89