mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
Patch #1393667: pdb now has a "run" command which restarts the debugged
Python program, optionally with different arguments.
This commit is contained in:
parent
c3a643192f
commit
8e84c65660
4 changed files with 49 additions and 3 deletions
|
@ -378,6 +378,14 @@ command with a \samp{global} command on the same line, e.g.:
|
|||
(Pdb)
|
||||
\end{verbatim}
|
||||
|
||||
\item[run \optional{\var{args} ...}]
|
||||
Restart the debugged python program. If an argument is supplied, it is
|
||||
splitted with "shlex" and the result is used as the new sys.argv.
|
||||
History, breakpoints, actions and debugger options are preserved.
|
||||
"restart" is an alias for "run".
|
||||
|
||||
\versionadded{2.6}
|
||||
|
||||
\item[q(uit)]
|
||||
|
||||
Quit from the debugger.
|
||||
|
|
|
@ -131,6 +131,12 @@ n(ext)
|
|||
r(eturn)
|
||||
Continue execution until the current function returns.
|
||||
|
||||
run [args...]
|
||||
Restart the debugged python program. If a string is supplied it is
|
||||
splitted with "shlex", and the result is used as the new sys.argv.
|
||||
History, breakpoints, actions and debugger options are preserved.
|
||||
"restart" is an alias for "run".
|
||||
|
||||
c(ont(inue))
|
||||
Continue execution, only stop when a breakpoint is encountered.
|
||||
|
||||
|
|
35
Lib/pdb.py
35
Lib/pdb.py
|
@ -13,6 +13,12 @@ import os
|
|||
import re
|
||||
import pprint
|
||||
import traceback
|
||||
|
||||
|
||||
class Restart(Exception):
|
||||
"""Causes a debugger to be restarted for the debugged python program."""
|
||||
pass
|
||||
|
||||
# Create a custom safe Repr instance and increase its maxstring.
|
||||
# The default of 30 truncates error messages too easily.
|
||||
_repr = Repr()
|
||||
|
@ -608,6 +614,18 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
return 1
|
||||
do_n = do_next
|
||||
|
||||
def do_run(self, arg):
|
||||
"""Restart program by raising an exception to be caught in the main debugger
|
||||
loop. If arguments were given, set them in sys.argv."""
|
||||
if arg:
|
||||
import shlex
|
||||
argv0 = sys.argv[0:1]
|
||||
sys.argv = shlex.split(arg)
|
||||
sys.argv[:0] = argv0
|
||||
raise Restart
|
||||
|
||||
do_restart = do_run
|
||||
|
||||
def do_return(self, arg):
|
||||
self.set_return(self.curframe)
|
||||
return 1
|
||||
|
@ -1012,6 +1030,15 @@ command with a 'global' command, e.g.:
|
|||
(Pdb) global list_options; list_options = ['-l']
|
||||
(Pdb)"""
|
||||
|
||||
def help_run(self):
|
||||
print """run [args...]
|
||||
Restart the debugged python program. If a string is supplied, it is
|
||||
splitted with "shlex" and the result is used as the new sys.argv.
|
||||
History, breakpoints, actions and debugger options are preserved.
|
||||
"restart" is an alias for "run"."""
|
||||
|
||||
help_restart = help_run
|
||||
|
||||
def help_quit(self):
|
||||
self.help_q()
|
||||
|
||||
|
@ -1204,9 +1231,8 @@ def main():
|
|||
|
||||
# Note on saving/restoring sys.argv: it's a good idea when sys.argv was
|
||||
# modified by the script being debugged. It's a bad idea when it was
|
||||
# changed by the user from the command line. The best approach would be to
|
||||
# have a "restart" command which would allow explicit specification of
|
||||
# command line arguments.
|
||||
# changed by the user from the command line. There is a "restart" command which
|
||||
# allows explicit specification of command line arguments.
|
||||
pdb = Pdb()
|
||||
while 1:
|
||||
try:
|
||||
|
@ -1214,6 +1240,9 @@ def main():
|
|||
if pdb._user_requested_quit:
|
||||
break
|
||||
print "The program finished and will be restarted"
|
||||
except Restart:
|
||||
print "Restarting", mainpyfile, "with arguments:"
|
||||
print "\t" + " ".join(sys.argv[1:])
|
||||
except SystemExit:
|
||||
# In most cases SystemExit does not warrant a post-mortem session.
|
||||
print "The program exited via sys.exit(). Exit status: ",
|
||||
|
|
|
@ -170,6 +170,9 @@ Core and builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Patch #1393667: pdb now has a "run" command which restarts the debugged
|
||||
Python program, optionally with different arguments.
|
||||
|
||||
- Patch #1649190: Adding support for _Bool to ctypes as c_bool.
|
||||
|
||||
- Patch #1530482: add pydoc.render_doc() which returns the documentation
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue