summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/pdb.py9
-rw-r--r--Lib/test/test_pdb.py17
-rw-r--r--Misc/NEWS.d/next/Library/2024-05-07-17-38-53.gh-issue-118714.XXKpVZ.rst2
3 files changed, 25 insertions, 3 deletions
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 4af16d0..85a3aa2 100644
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -2481,9 +2481,12 @@ def main():
traceback.print_exception(e, colorize=_colorize.can_colorize())
print("Uncaught exception. Entering post mortem debugging")
print("Running 'cont' or 'step' will restart the program")
- pdb.interaction(None, e)
- print(f"Post mortem debugger finished. The {target} will "
- "be restarted")
+ try:
+ pdb.interaction(None, e)
+ except Restart:
+ print("Restarting", target, "with arguments:")
+ print("\t" + " ".join(sys.argv[1:]))
+ continue
if pdb._user_requested_quit:
break
print("The program finished and will be restarted")
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 7124015..5c74455 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -3545,6 +3545,23 @@ def bœr():
# the file as up to date
self.assertNotIn("WARNING:", stdout)
+ def test_post_mortem_restart(self):
+ script = """
+ def foo():
+ raise ValueError("foo")
+ foo()
+ """
+
+ commands = """
+ continue
+ restart
+ continue
+ quit
+ """
+
+ stdout, stderr = self.run_pdb_script(script, commands)
+ self.assertIn("Restarting", stdout)
+
def test_relative_imports(self):
self.module_name = 't_main'
os_helper.rmtree(self.module_name)
diff --git a/Misc/NEWS.d/next/Library/2024-05-07-17-38-53.gh-issue-118714.XXKpVZ.rst b/Misc/NEWS.d/next/Library/2024-05-07-17-38-53.gh-issue-118714.XXKpVZ.rst
new file mode 100644
index 0000000..f41baee
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-05-07-17-38-53.gh-issue-118714.XXKpVZ.rst
@@ -0,0 +1,2 @@
+Allow ``restart`` in post-mortem debugging of :mod:`pdb`. Removed restart message
+when the user quits pdb from post-mortem mode.