5 from __future__ import print_function
12 from lldbsuite.test.decorators import *
13 from lldbsuite.test.lldbtest import *
14 from lldbsuite.test import lldbutil
16 exe_name = "ProcessAttach" # Must match Makefile
19 class ProcessAttachTestCase(TestBase):
21 mydir = TestBase.compute_mydir(__file__)
23 NO_DEBUG_INFO_TESTCASE = True
26 @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], bugnumber="<rdar://problem/34538611>") # old lldb-server has race condition, launching an inferior and then launching debugserver in quick succession sometimes fails
27 def test_attach_to_process_by_id(self):
28 """Test attach by process id"""
30 exe = self.getBuildArtifact(exe_name)
33 popen = self.spawnSubprocess(exe)
34 self.addTearDownHook(self.cleanupSubprocesses)
36 self.runCmd("process attach -p " + str(popen.pid))
38 target = self.dbg.GetSelectedTarget()
40 process = target.GetProcess()
41 self.assertTrue(process, PROCESS_IS_VALID)
43 @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], bugnumber="<rdar://problem/34538611>") # old lldb-server has race condition, launching an inferior and then launching debugserver in quick succession sometimes fails
44 def test_attach_to_process_from_different_dir_by_id(self):
45 """Test attach by process id"""
46 newdir = self.getBuildArtifact("newdir")
50 if e.errno != os.errno.EEXIST:
52 testdir = self.getBuildDir()
53 exe = os.path.join(newdir, 'proc_attach')
54 self.buildProgram('main.cpp', exe)
55 self.addTearDownHook(lambda: shutil.rmtree(newdir))
58 popen = self.spawnSubprocess(exe)
59 self.addTearDownHook(self.cleanupSubprocesses)
62 self.addTearDownHook(lambda: os.chdir(testdir))
63 self.runCmd("process attach -p " + str(popen.pid))
65 target = self.dbg.GetSelectedTarget()
67 process = target.GetProcess()
68 self.assertTrue(process, PROCESS_IS_VALID)
70 @expectedFailureAll(oslist=['ios', 'watchos', 'tvos', 'bridgeos'], bugnumber="<rdar://problem/34538611>") # old lldb-server has race condition, launching an inferior and then launching debugserver in quick succession sometimes fails
71 def test_attach_to_process_by_name(self):
72 """Test attach by process name"""
74 exe = self.getBuildArtifact(exe_name)
77 popen = self.spawnSubprocess(exe)
78 self.addTearDownHook(self.cleanupSubprocesses)
80 self.runCmd("process attach -n " + exe_name)
82 target = self.dbg.GetSelectedTarget()
84 process = target.GetProcess()
85 self.assertTrue(process, PROCESS_IS_VALID)
88 # Destroy process before TestBase.tearDown()
89 self.dbg.GetSelectedTarget().GetProcess().Destroy()
91 # Call super's tearDown().
92 TestBase.tearDown(self)