https://github.com/python/cpython/commit/058bc182b97fd5721e28d4ab84cebe703cf0d2d9
commit: 058bc182b97fd5721e28d4ab84cebe703cf0d2d9
branch: main
author: Frost Ming <[email protected]>
committer: gaogaotiantian <[email protected]>
date: 2025-10-28T23:12:12-07:00
summary:

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

files:
A Misc/NEWS.d/next/Library/2025-10-11-09-07-06.gh-issue-139940.g54efZ.rst
M Lib/pdb.py
M Lib/test/test_remote_pdb.py

diff --git a/Lib/pdb.py b/Lib/pdb.py
index f695a39332e461..4ee12d17a611e6 100644
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -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:
diff --git a/Lib/test/test_remote_pdb.py b/Lib/test/test_remote_pdb.py
index ec11e41678849b..ede99de981971a 100644
--- a/Lib/test/test_remote_pdb.py
+++ b/Lib/test/test_remote_pdb.py
@@ -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()
diff --git 
a/Misc/NEWS.d/next/Library/2025-10-11-09-07-06.gh-issue-139940.g54efZ.rst 
b/Misc/NEWS.d/next/Library/2025-10-11-09-07-06.gh-issue-139940.g54efZ.rst
new file mode 100644
index 00000000000000..2501135e657e7d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-10-11-09-07-06.gh-issue-139940.g54efZ.rst
@@ -0,0 +1 @@
+Print clearer error message when using ``pdb`` to attach to a non-existing 
process.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to