gh-139940: Handle RuntimeError when attaching to a non-existing process in pdb. (#139941)

This commit is contained in:
Frost Ming 2025-10-29 14:12:12 +08:00 committed by GitHub
parent c41f84ff61
commit 058bc182b9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 20 additions and 1 deletions

View file

@ -3577,7 +3577,13 @@ def main():
parser.error("argument -m: not allowed with argument --pid")
try:
attach(opts.pid, opts.commands)
except PermissionError as e:
except RuntimeError:
print(
f"Cannot attach to pid {opts.pid}, please make sure that the process exists "
"and is using the same Python version."
)
sys.exit(1)
except PermissionError:
exit_with_permission_help_text()
return
elif opts.module:

View file

@ -1590,5 +1590,17 @@ def test_attach_to_process_with_colors(self):
self.assertNotIn("while x == 1", output["client"]["stdout"])
self.assertIn("while x == 1", re.sub("\x1b[^m]*m", "", output["client"]["stdout"]))
def test_attach_to_non_existent_process(self):
with force_color(False):
result = subprocess.run([sys.executable, "-m", "pdb", "-p", "999999"], text=True, capture_output=True)
self.assertNotEqual(result.returncode, 0)
if sys.platform == "darwin":
# On MacOS, attaching to a non-existent process gives PermissionError
error = "The specified process cannot be attached to due to insufficient permissions"
else:
error = "Cannot attach to pid 999999, please make sure that the process exists"
self.assertIn(error, result.stdout)
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1 @@
Print clearer error message when using ``pdb`` to attach to a non-existing process.