mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +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)
|
(Pdb)
|
||||||
\end{verbatim}
|
\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)]
|
\item[q(uit)]
|
||||||
|
|
||||||
Quit from the debugger.
|
Quit from the debugger.
|
||||||
|
|
|
@ -131,6 +131,12 @@ n(ext)
|
||||||
r(eturn)
|
r(eturn)
|
||||||
Continue execution until the current function returns.
|
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))
|
c(ont(inue))
|
||||||
Continue execution, only stop when a breakpoint is encountered.
|
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 re
|
||||||
import pprint
|
import pprint
|
||||||
import traceback
|
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.
|
# Create a custom safe Repr instance and increase its maxstring.
|
||||||
# The default of 30 truncates error messages too easily.
|
# The default of 30 truncates error messages too easily.
|
||||||
_repr = Repr()
|
_repr = Repr()
|
||||||
|
@ -608,6 +614,18 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
||||||
return 1
|
return 1
|
||||||
do_n = do_next
|
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):
|
def do_return(self, arg):
|
||||||
self.set_return(self.curframe)
|
self.set_return(self.curframe)
|
||||||
return 1
|
return 1
|
||||||
|
@ -1012,6 +1030,15 @@ command with a 'global' command, e.g.:
|
||||||
(Pdb) global list_options; list_options = ['-l']
|
(Pdb) global list_options; list_options = ['-l']
|
||||||
(Pdb)"""
|
(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):
|
def help_quit(self):
|
||||||
self.help_q()
|
self.help_q()
|
||||||
|
|
||||||
|
@ -1204,9 +1231,8 @@ def main():
|
||||||
|
|
||||||
# Note on saving/restoring sys.argv: it's a good idea when sys.argv was
|
# 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
|
# 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
|
# changed by the user from the command line. There is a "restart" command which
|
||||||
# have a "restart" command which would allow explicit specification of
|
# allows explicit specification of command line arguments.
|
||||||
# command line arguments.
|
|
||||||
pdb = Pdb()
|
pdb = Pdb()
|
||||||
while 1:
|
while 1:
|
||||||
try:
|
try:
|
||||||
|
@ -1214,6 +1240,9 @@ def main():
|
||||||
if pdb._user_requested_quit:
|
if pdb._user_requested_quit:
|
||||||
break
|
break
|
||||||
print "The program finished and will be restarted"
|
print "The program finished and will be restarted"
|
||||||
|
except Restart:
|
||||||
|
print "Restarting", mainpyfile, "with arguments:"
|
||||||
|
print "\t" + " ".join(sys.argv[1:])
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
# In most cases SystemExit does not warrant a post-mortem session.
|
# In most cases SystemExit does not warrant a post-mortem session.
|
||||||
print "The program exited via sys.exit(). Exit status: ",
|
print "The program exited via sys.exit(). Exit status: ",
|
||||||
|
|
|
@ -170,6 +170,9 @@ Core and builtins
|
||||||
Library
|
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 #1649190: Adding support for _Bool to ctypes as c_bool.
|
||||||
|
|
||||||
- Patch #1530482: add pydoc.render_doc() which returns the documentation
|
- Patch #1530482: add pydoc.render_doc() which returns the documentation
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue