1""" 2Test process attach when executable was deleted. 3""" 4 5 6import os 7import lldb 8from lldbsuite.test.decorators import * 9from lldbsuite.test.lldbtest import * 10from lldbsuite.test import lldbutil 11 12 13class TestDeletedExecutable(TestBase): 14 NO_DEBUG_INFO_TESTCASE = True 15 16 @skipIfWindows # cannot delete a running executable 17 def test(self): 18 self.build() 19 exe = self.getBuildArtifact("a.out") 20 21 # Use a file as a synchronization point between test and inferior. 22 pid_file_path = lldbutil.append_to_process_working_directory( 23 self, "token_pid_%d" % (int(os.getpid())) 24 ) 25 self.addTearDownHook( 26 lambda: self.run_platform_command("rm %s" % (pid_file_path)) 27 ) 28 29 # Spawn a new process 30 popen = self.spawnSubprocess(exe, [pid_file_path]) 31 32 # Wait until process has fully started up. 33 pid = lldbutil.wait_for_file_on_target(self, pid_file_path) 34 35 # Now we can safely remove the executable and test if we can attach. 36 os.remove(exe) 37 38 self.runCmd("process attach -p " + str(popen.pid)) 39 self.runCmd("kill") 40