mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
#9279: remove the pdb.doc file, put its contents in pdb.__doc__. Also sync this and the pdb docs, introduce a new directive for pdb commands and a role to link to them.
This commit is contained in:
parent
1b3c262027
commit
02053ee3b9
5 changed files with 403 additions and 337 deletions
|
|
@ -503,7 +503,7 @@ in a different style:
|
||||||
.. describe:: option
|
.. describe:: option
|
||||||
|
|
||||||
A command-line option to an executable program. The leading hyphen(s) must
|
A command-line option to an executable program. The leading hyphen(s) must
|
||||||
be included.
|
be included. If a matching ``cmdoption`` directive exists, it is linked to.
|
||||||
|
|
||||||
.. describe:: program
|
.. describe:: program
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ supports post-mortem debugging and can be called under program control.
|
||||||
module: bdb
|
module: bdb
|
||||||
module: cmd
|
module: cmd
|
||||||
|
|
||||||
The debugger is extensible --- it is actually defined as the class :class:`Pdb`.
|
The debugger is extensible -- it is actually defined as the class :class:`Pdb`.
|
||||||
This is currently undocumented but easily understood by reading the source. The
|
This is currently undocumented but easily understood by reading the source. The
|
||||||
extension interface uses the modules :mod:`bdb` and :mod:`cmd`.
|
extension interface uses the modules :mod:`bdb` and :mod:`cmd`.
|
||||||
|
|
||||||
|
|
@ -55,8 +55,8 @@ insert ::
|
||||||
import pdb; pdb.set_trace()
|
import pdb; pdb.set_trace()
|
||||||
|
|
||||||
at the location you want to break into the debugger. You can then step through
|
at the location you want to break into the debugger. You can then step through
|
||||||
the code following this statement, and continue running without the debugger using
|
the code following this statement, and continue running without the debugger
|
||||||
the ``c`` command.
|
using the :pdbcmd:`continue` command.
|
||||||
|
|
||||||
The typical usage to inspect a crashed program is::
|
The typical usage to inspect a crashed program is::
|
||||||
|
|
||||||
|
|
@ -82,26 +82,28 @@ slightly different way:
|
||||||
.. function:: run(statement, globals=None, locals=None)
|
.. function:: run(statement, globals=None, locals=None)
|
||||||
|
|
||||||
Execute the *statement* (given as a string) under debugger control. The
|
Execute the *statement* (given as a string) under debugger control. The
|
||||||
debugger prompt appears before any code is executed; you can set breakpoints and
|
debugger prompt appears before any code is executed; you can set breakpoints
|
||||||
type ``continue``, or you can step through the statement using ``step`` or
|
and type :pdbcmd:`continue`, or you can step through the statement using
|
||||||
``next`` (all these commands are explained below). The optional *globals* and
|
:pdbcmd:`step` or :pdbcmd:`next` (all these commands are explained below).
|
||||||
*locals* arguments specify the environment in which the code is executed; by
|
The optional *globals* and *locals* arguments specify the environment in
|
||||||
default the dictionary of the module :mod:`__main__` is used. (See the
|
which the code is executed; by default the dictionary of the module
|
||||||
explanation of the built-in :func:`exec` or :func:`eval` functions.)
|
:mod:`__main__` is used. (See the explanation of the built-in :func:`exec`
|
||||||
|
or :func:`eval` functions.)
|
||||||
|
|
||||||
|
|
||||||
.. function:: runeval(expression, globals=None, locals=None)
|
.. function:: runeval(expression, globals=None, locals=None)
|
||||||
|
|
||||||
Evaluate the *expression* (given as a string) under debugger control. When
|
Evaluate the *expression* (given as a string) under debugger control. When
|
||||||
:func:`runeval` returns, it returns the value of the expression. Otherwise this
|
:func:`runeval` returns, it returns the value of the expression. Otherwise
|
||||||
function is similar to :func:`run`.
|
this function is similar to :func:`run`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: runcall(function, *args, **kwds)
|
.. function:: runcall(function, *args, **kwds)
|
||||||
|
|
||||||
Call the *function* (a function or method object, not a string) with the given
|
Call the *function* (a function or method object, not a string) with the
|
||||||
arguments. When :func:`runcall` returns, it returns whatever the function call
|
given arguments. When :func:`runcall` returns, it returns whatever the
|
||||||
returned. The debugger prompt appears as soon as the function is entered.
|
function call returned. The debugger prompt appears as soon as the function
|
||||||
|
is entered.
|
||||||
|
|
||||||
|
|
||||||
.. function:: set_trace()
|
.. function:: set_trace()
|
||||||
|
|
@ -160,16 +162,17 @@ access further features, you have to do this yourself:
|
||||||
Debugger Commands
|
Debugger Commands
|
||||||
=================
|
=================
|
||||||
|
|
||||||
The debugger recognizes the following commands. Most commands can be
|
The commands recognized by the debugger are listed below. Most commands can be
|
||||||
abbreviated to one or two letters; e.g. ``h(elp)`` means that either ``h`` or
|
abbreviated to one or two letters as indicated; e.g. ``h(elp)`` means that
|
||||||
``help`` can be used to enter the help command (but not ``he`` or ``hel``, nor
|
either ``h`` or ``help`` can be used to enter the help command (but not ``he``
|
||||||
``H`` or ``Help`` or ``HELP``). Arguments to commands must be separated by
|
or ``hel``, nor ``H`` or ``Help`` or ``HELP``). Arguments to commands must be
|
||||||
whitespace (spaces or tabs). Optional arguments are enclosed in square brackets
|
separated by whitespace (spaces or tabs). Optional arguments are enclosed in
|
||||||
(``[]``) in the command syntax; the square brackets must not be typed.
|
square brackets (``[]``) in the command syntax; the square brackets must not be
|
||||||
Alternatives in the command syntax are separated by a vertical bar (``|``).
|
typed. Alternatives in the command syntax are separated by a vertical bar
|
||||||
|
(``|``).
|
||||||
|
|
||||||
Entering a blank line repeats the last command entered. Exception: if the last
|
Entering a blank line repeats the last command entered. Exception: if the last
|
||||||
command was a ``list`` command, the next 11 lines are listed.
|
command was a :pdbcmd:`list` command, the next 11 lines are listed.
|
||||||
|
|
||||||
Commands that the debugger doesn't recognize are assumed to be Python statements
|
Commands that the debugger doesn't recognize are assumed to be Python statements
|
||||||
and are executed in the context of the program being debugged. Python
|
and are executed in the context of the program being debugged. Python
|
||||||
|
|
@ -179,93 +182,107 @@ change a variable or call a function. When an exception occurs in such a
|
||||||
statement, the exception name is printed but the debugger's state is not
|
statement, the exception name is printed but the debugger's state is not
|
||||||
changed.
|
changed.
|
||||||
|
|
||||||
|
The debugger supports :ref:`aliases <debugger-aliases>`. Aliases can have
|
||||||
|
parameters which allows one a certain level of adaptability to the context under
|
||||||
|
examination.
|
||||||
|
|
||||||
Multiple commands may be entered on a single line, separated by ``;;``. (A
|
Multiple commands may be entered on a single line, separated by ``;;``. (A
|
||||||
single ``;`` is not used as it is the separator for multiple commands in a line
|
single ``;`` is not used as it is the separator for multiple commands in a line
|
||||||
that is passed to the Python parser.) No intelligence is applied to separating
|
that is passed to the Python parser.) No intelligence is applied to separating
|
||||||
the commands; the input is split at the first ``;;`` pair, even if it is in the
|
the commands; the input is split at the first ``;;`` pair, even if it is in the
|
||||||
middle of a quoted string.
|
middle of a quoted string.
|
||||||
|
|
||||||
The debugger supports aliases. Aliases can have parameters which allows one a
|
|
||||||
certain level of adaptability to the context under examination.
|
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
pair: .pdbrc; file
|
pair: .pdbrc; file
|
||||||
triple: debugger; configuration; file
|
triple: debugger; configuration; file
|
||||||
|
|
||||||
If a file :file:`.pdbrc` exists in the user's home directory or in the current
|
If a file :file:`.pdbrc` exists in the user's home directory or in the current
|
||||||
directory, it is read in and executed as if it had been typed at the debugger
|
directory, it is read in and executed as if it had been typed at the debugger
|
||||||
prompt. This is particularly useful for aliases. If both files exist, the one
|
prompt. This is particularly useful for aliases. If both files exist, the one
|
||||||
in the home directory is read first and aliases defined there can be overridden
|
in the home directory is read first and aliases defined there can be overridden
|
||||||
by the local file.
|
by the local file.
|
||||||
|
|
||||||
h(elp) [*command*]
|
|
||||||
|
.. pdbcommand:: h(elp) [command]
|
||||||
|
|
||||||
Without argument, print the list of available commands. With a *command* as
|
Without argument, print the list of available commands. With a *command* as
|
||||||
argument, print help about that command. ``help pdb`` displays the full
|
argument, print help about that command. ``help pdb`` displays the full
|
||||||
documentation file; if the environment variable :envvar:`PAGER` is defined, the
|
documentation (the docstring of the :mod:`pdb` module); if the environment
|
||||||
file is piped through that command instead. Since the *command* argument must
|
variable :envvar:`PAGER` is defined, the string is piped through that command
|
||||||
be an identifier, ``help exec`` must be entered to get help on the ``!``
|
instead. Since the *command* argument must be an identifier, ``help exec``
|
||||||
command.
|
must be entered to get help on the ``!`` command.
|
||||||
|
|
||||||
|
.. pdbcommand:: w(here)
|
||||||
|
|
||||||
w(here)
|
|
||||||
Print a stack trace, with the most recent frame at the bottom. An arrow
|
Print a stack trace, with the most recent frame at the bottom. An arrow
|
||||||
indicates the current frame, which determines the context of most commands.
|
indicates the current frame, which determines the context of most commands.
|
||||||
|
|
||||||
d(own) [*count*]
|
.. pdbcommand:: d(own) [count]
|
||||||
|
|
||||||
Move the current frame *count* (default one) levels down in the stack trace
|
Move the current frame *count* (default one) levels down in the stack trace
|
||||||
(to a newer frame).
|
(to a newer frame).
|
||||||
|
|
||||||
u(p) [*count*]
|
.. pdbcommand:: u(p) [count]
|
||||||
Move the current frame *count* (default one) levels up in the stack trace
|
|
||||||
(to an older frame).
|
Move the current frame *count* (default one) levels up in the stack trace (to
|
||||||
|
an older frame).
|
||||||
|
|
||||||
|
.. pdbcommand:: b(reak) [([filename:]lineno | function) [, condition]]
|
||||||
|
|
||||||
b(reak) [[*filename*:]\ *lineno* | *function*\ [, *condition*]]
|
|
||||||
With a *lineno* argument, set a break there in the current file. With a
|
With a *lineno* argument, set a break there in the current file. With a
|
||||||
*function* argument, set a break at the first executable statement within that
|
*function* argument, set a break at the first executable statement within
|
||||||
function. The line number may be prefixed with a filename and a colon, to
|
that function. The line number may be prefixed with a filename and a colon,
|
||||||
specify a breakpoint in another file (probably one that hasn't been loaded yet).
|
to specify a breakpoint in another file (probably one that hasn't been loaded
|
||||||
The file is searched on ``sys.path``. Note that each breakpoint is assigned a
|
yet). The file is searched on :data:`sys.path`. Note that each breakpoint
|
||||||
number to which all the other breakpoint commands refer.
|
is assigned a number to which all the other breakpoint commands refer.
|
||||||
|
|
||||||
If a second argument is present, it is an expression which must evaluate to true
|
If a second argument is present, it is an expression which must evaluate to
|
||||||
before the breakpoint is honored.
|
true before the breakpoint is honored.
|
||||||
|
|
||||||
Without argument, list all breaks, including for each breakpoint, the number of
|
Without argument, list all breaks, including for each breakpoint, the number
|
||||||
times that breakpoint has been hit, the current ignore count, and the associated
|
of times that breakpoint has been hit, the current ignore count, and the
|
||||||
condition if any.
|
associated condition if any.
|
||||||
|
|
||||||
tbreak [[*filename*:]\ *lineno* | *function*\ [, *condition*]]
|
.. pdbcommand:: tbreak [([filename:]lineno | function) [, condition]]
|
||||||
Temporary breakpoint, which is removed automatically when it is first hit. The
|
|
||||||
arguments are the same as break.
|
Temporary breakpoint, which is removed automatically when it is first hit.
|
||||||
|
The arguments are the same as for :pdbcmd:`break`.
|
||||||
|
|
||||||
|
.. pdbcommand:: cl(ear) [bpnumber [bpnumber ...]]
|
||||||
|
|
||||||
cl(ear) [*bpnumber* [*bpnumber ...*]]
|
|
||||||
With a space separated list of breakpoint numbers, clear those breakpoints.
|
With a space separated list of breakpoint numbers, clear those breakpoints.
|
||||||
Without argument, clear all breaks (but first ask confirmation).
|
Without argument, clear all breaks (but first ask confirmation).
|
||||||
|
|
||||||
disable [*bpnumber* [*bpnumber ...*]]
|
.. pdbcommand:: disable [bpnumber [bpnumber ...]]
|
||||||
Disables the breakpoints given as a space separated list of breakpoint numbers.
|
|
||||||
Disabling a breakpoint means it cannot cause the program to stop execution, but
|
|
||||||
unlike clearing a breakpoint, it remains in the list of breakpoints and can be
|
|
||||||
(re-)enabled.
|
|
||||||
|
|
||||||
enable [*bpnumber* [*bpnumber ...*]]
|
Disable the breakpoints given as a space separated list of breakpoint
|
||||||
Enables the breakpoints specified.
|
numbers. Disabling a breakpoint means it cannot cause the program to stop
|
||||||
|
execution, but unlike clearing a breakpoint, it remains in the list of
|
||||||
|
breakpoints and can be (re-)enabled.
|
||||||
|
|
||||||
ignore *bpnumber* [*count*]
|
.. pdbcommand:: enable [bpnumber [bpnumber ...]]
|
||||||
Sets the ignore count for the given breakpoint number. If count is omitted, the
|
|
||||||
ignore count is set to 0. A breakpoint becomes active when the ignore count is
|
|
||||||
zero. When non-zero, the count is decremented each time the breakpoint is
|
|
||||||
reached and the breakpoint is not disabled and any associated condition
|
|
||||||
evaluates to true.
|
|
||||||
|
|
||||||
condition *bpnumber* [*condition*]
|
Enable the breakpoints specified.
|
||||||
Condition is an expression which must evaluate to true before the breakpoint is
|
|
||||||
honored. If condition is absent, any existing condition is removed; i.e., the
|
.. pdbcommand:: ignore bpnumber [count]
|
||||||
breakpoint is made unconditional.
|
|
||||||
|
Set the ignore count for the given breakpoint number. If count is omitted,
|
||||||
|
the ignore count is set to 0. A breakpoint becomes active when the ignore
|
||||||
|
count is zero. When non-zero, the count is decremented each time the
|
||||||
|
breakpoint is reached and the breakpoint is not disabled and any associated
|
||||||
|
condition evaluates to true.
|
||||||
|
|
||||||
|
.. pdbcommand:: condition bpnumber [condition]
|
||||||
|
|
||||||
|
Set a new *condition* for the breakpoint, an expression which must evaluate
|
||||||
|
to true before the breakpoint is honored. If *condition* is absent, any
|
||||||
|
existing condition is removed; i.e., the breakpoint is made unconditional.
|
||||||
|
|
||||||
|
.. pdbcommand:: commands [bpnumber]
|
||||||
|
|
||||||
commands [*bpnumber*]
|
|
||||||
Specify a list of commands for breakpoint number *bpnumber*. The commands
|
Specify a list of commands for breakpoint number *bpnumber*. The commands
|
||||||
themselves appear on the following lines. Type a line containing just 'end' to
|
themselves appear on the following lines. Type a line containing just
|
||||||
terminate the commands. An example::
|
``end`` to terminate the commands. An example::
|
||||||
|
|
||||||
(Pdb) commands 1
|
(Pdb) commands 1
|
||||||
(com) print some_variable
|
(com) print some_variable
|
||||||
|
|
@ -273,12 +290,12 @@ commands [*bpnumber*]
|
||||||
(Pdb)
|
(Pdb)
|
||||||
|
|
||||||
To remove all commands from a breakpoint, type commands and follow it
|
To remove all commands from a breakpoint, type commands and follow it
|
||||||
immediately with end; that is, give no commands.
|
immediately with ``end``; that is, give no commands.
|
||||||
|
|
||||||
With no *bpnumber* argument, commands refers to the last breakpoint set.
|
With no *bpnumber* argument, commands refers to the last breakpoint set.
|
||||||
|
|
||||||
You can use breakpoint commands to start your program up again. Simply use the
|
You can use breakpoint commands to start your program up again. Simply use
|
||||||
continue command, or step, or any other command that resumes execution.
|
the continue command, or step, or any other command that resumes execution.
|
||||||
|
|
||||||
Specifying any command resuming execution (currently continue, step, next,
|
Specifying any command resuming execution (currently continue, step, next,
|
||||||
return, jump, quit and their abbreviations) terminates the command list (as if
|
return, jump, quit and their abbreviations) terminates the command list (as if
|
||||||
|
|
@ -292,63 +309,81 @@ commands [*bpnumber*]
|
||||||
that are to print a specific message and then continue. If none of the other
|
that are to print a specific message and then continue. If none of the other
|
||||||
commands print anything, you see no sign that the breakpoint was reached.
|
commands print anything, you see no sign that the breakpoint was reached.
|
||||||
|
|
||||||
s(tep)
|
.. pdbcommand:: s(tep)
|
||||||
|
|
||||||
Execute the current line, stop at the first possible occasion (either in a
|
Execute the current line, stop at the first possible occasion (either in a
|
||||||
function that is called or on the next line in the current function).
|
function that is called or on the next line in the current function).
|
||||||
|
|
||||||
n(ext)
|
.. pdbcommand:: n(ext)
|
||||||
Continue execution until the next line in the current function is reached or it
|
|
||||||
returns. (The difference between ``next`` and ``step`` is that ``step`` stops
|
Continue execution until the next line in the current function is reached or
|
||||||
inside a called function, while ``next`` executes called functions at (nearly)
|
it returns. (The difference between :pdbcmd:`next` and :pdbcmd:`step` is
|
||||||
full speed, only stopping at the next line in the current function.)
|
that :pdbcmd:`step` stops inside a called function, while :pdbcmd:`next`
|
||||||
|
executes called functions at (nearly) full speed, only stopping at the next
|
||||||
|
line in the current function.)
|
||||||
|
|
||||||
|
.. pdbcommand:: unt(il)
|
||||||
|
|
||||||
unt(il)
|
|
||||||
Continue execution until the line with the line number greater than the
|
Continue execution until the line with the line number greater than the
|
||||||
current one is reached or when returning from current frame.
|
current one is reached or when returning from current frame.
|
||||||
|
|
||||||
r(eturn)
|
.. pdbcommand:: r(eturn)
|
||||||
|
|
||||||
Continue execution until the current function returns.
|
Continue execution until the current function returns.
|
||||||
|
|
||||||
c(ont(inue))
|
.. pdbcommand:: c(ont(inue))
|
||||||
|
|
||||||
Continue execution, only stop when a breakpoint is encountered.
|
Continue execution, only stop when a breakpoint is encountered.
|
||||||
|
|
||||||
j(ump) *lineno*
|
.. pdbcommand:: j(ump) lineno
|
||||||
Set the next line that will be executed. Only available in the bottom-most
|
|
||||||
frame. This lets you jump back and execute code again, or jump forward to skip
|
|
||||||
code that you don't want to run.
|
|
||||||
|
|
||||||
It should be noted that not all jumps are allowed --- for instance it is not
|
Set the next line that will be executed. Only available in the bottom-most
|
||||||
|
frame. This lets you jump back and execute code again, or jump forward to
|
||||||
|
skip code that you don't want to run.
|
||||||
|
|
||||||
|
It should be noted that not all jumps are allowed -- for instance it is not
|
||||||
possible to jump into the middle of a :keyword:`for` loop or out of a
|
possible to jump into the middle of a :keyword:`for` loop or out of a
|
||||||
:keyword:`finally` clause.
|
:keyword:`finally` clause.
|
||||||
|
|
||||||
l(ist) [*first*\ [, *last*]]
|
.. pdbcommand:: l(ist) [first[, last]]
|
||||||
List source code for the current file. Without arguments, list 11 lines around
|
|
||||||
the current line or continue the previous listing. With one argument, list 11
|
List source code for the current file. Without arguments, list 11 lines
|
||||||
lines around at that line. With two arguments, list the given range; if the
|
around the current line or continue the previous listing. With one argument,
|
||||||
second argument is less than the first, it is interpreted as a count.
|
list 11 lines around at that line. With two arguments, list the given range;
|
||||||
|
if the second argument is less than the first, it is interpreted as a count.
|
||||||
|
|
||||||
|
.. pdbcommand:: a(rgs)
|
||||||
|
|
||||||
a(rgs)
|
|
||||||
Print the argument list of the current function.
|
Print the argument list of the current function.
|
||||||
|
|
||||||
p(rint) *expression*
|
.. pdbcommand:: p(rint) expression
|
||||||
|
|
||||||
Evaluate the *expression* in the current context and print its value.
|
Evaluate the *expression* in the current context and print its value.
|
||||||
|
|
||||||
pp *expression*
|
.. pdbcommand:: pp expression
|
||||||
Like the ``p`` command, except the value of the expression is pretty-printed
|
|
||||||
using the :mod:`pprint` module.
|
|
||||||
|
|
||||||
alias [*name* [command]]
|
Like the :pdbcmd:`print` command, except the value of the expression is
|
||||||
Creates an alias called *name* that executes *command*. The command must *not*
|
pretty-printed using the :mod:`pprint` module.
|
||||||
be enclosed in quotes. Replaceable parameters can be indicated by ``%1``,
|
|
||||||
``%2``, and so on, while ``%*`` is replaced by all the parameters. If no
|
|
||||||
command is given, the current alias for *name* is shown. If no arguments are
|
|
||||||
given, all aliases are listed.
|
|
||||||
|
|
||||||
Aliases may be nested and can contain anything that can be legally typed at the
|
.. pdbcommand:: whatis expression
|
||||||
pdb prompt. Note that internal pdb commands *can* be overridden by aliases.
|
|
||||||
Such a command is then hidden until the alias is removed. Aliasing is
|
Print the type of the *expression*.
|
||||||
recursively applied to the first word of the command line; all other words in
|
|
||||||
the line are left alone.
|
.. _debugger-aliases:
|
||||||
|
|
||||||
|
.. pdbcommand:: alias [name [command]]
|
||||||
|
|
||||||
|
Create an alias called *name* that executes *command*. The command must
|
||||||
|
*not* be enclosed in quotes. Replaceable parameters can be indicated by
|
||||||
|
``%1``, ``%2``, and so on, while ``%*`` is replaced by all the parameters.
|
||||||
|
If no command is given, the current alias for *name* is shown. If no
|
||||||
|
arguments are given, all aliases are listed.
|
||||||
|
|
||||||
|
Aliases may be nested and can contain anything that can be legally typed at
|
||||||
|
the pdb prompt. Note that internal pdb commands *can* be overridden by
|
||||||
|
aliases. Such a command is then hidden until the alias is removed. Aliasing
|
||||||
|
is recursively applied to the first word of the command line; all other words
|
||||||
|
in the line are left alone.
|
||||||
|
|
||||||
As an example, here are two useful aliases (especially when placed in the
|
As an example, here are two useful aliases (especially when placed in the
|
||||||
:file:`.pdbrc` file)::
|
:file:`.pdbrc` file)::
|
||||||
|
|
@ -358,25 +393,32 @@ alias [*name* [command]]
|
||||||
#Print instance variables in self
|
#Print instance variables in self
|
||||||
alias ps pi self
|
alias ps pi self
|
||||||
|
|
||||||
unalias *name*
|
.. pdbcommand:: unalias name
|
||||||
Deletes the specified alias.
|
|
||||||
|
Delete the specified alias.
|
||||||
|
|
||||||
|
.. pdbcommand:: ! statement
|
||||||
|
|
||||||
[!]\ *statement*
|
|
||||||
Execute the (one-line) *statement* in the context of the current stack frame.
|
Execute the (one-line) *statement* in the context of the current stack frame.
|
||||||
The exclamation point can be omitted unless the first word of the statement
|
The exclamation point can be omitted unless the first word of the statement
|
||||||
resembles a debugger command. To set a global variable, you can prefix the
|
resembles a debugger command. To set a global variable, you can prefix the
|
||||||
assignment command with a ``global`` command on the same line, e.g.::
|
assignment command with a :keyword:`global` statement on the same line,
|
||||||
|
e.g.::
|
||||||
|
|
||||||
(Pdb) global list_options; list_options = ['-l']
|
(Pdb) global list_options; list_options = ['-l']
|
||||||
(Pdb)
|
(Pdb)
|
||||||
|
|
||||||
run [*args* ...]
|
.. pdbcommand:: run [args ...]
|
||||||
Restart the debugged Python program. If an argument is supplied, it is split
|
restart [args ...]
|
||||||
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".
|
|
||||||
|
|
||||||
q(uit)
|
Restart the debugged Python program. If an argument is supplied, it is split
|
||||||
Quit from the debugger. The program being executed is aborted.
|
with :mod:`shlex` and the result is used as the new :data:`sys.argv`.
|
||||||
|
History, breakpoints, actions and debugger options are preserved.
|
||||||
|
:pdbcmd:`restart` is an alias for :pdbcmd:`run`.
|
||||||
|
|
||||||
|
.. pdbcommand:: q(uit)
|
||||||
|
|
||||||
|
Quit from the debugger. The program being executed is aborted.
|
||||||
|
|
||||||
|
|
||||||
.. rubric:: Footnotes
|
.. rubric:: Footnotes
|
||||||
|
|
|
||||||
|
|
@ -165,6 +165,28 @@ def parse_opcode_signature(env, sig, signode):
|
||||||
return opname.strip()
|
return opname.strip()
|
||||||
|
|
||||||
|
|
||||||
|
pdbcmd_sig_re = re.compile(r'([a-z()!]+)\s*(.*)')
|
||||||
|
|
||||||
|
# later...
|
||||||
|
#pdbargs_tokens_re = re.compile(r'''[a-zA-Z]+ | # identifiers
|
||||||
|
# [.,:]+ | # punctuation
|
||||||
|
# [\[\]()] | # parens
|
||||||
|
# \s+ # whitespace
|
||||||
|
# ''', re.X)
|
||||||
|
|
||||||
|
def parse_pdb_command(env, sig, signode):
|
||||||
|
"""Transform a pdb command signature into RST nodes."""
|
||||||
|
m = pdbcmd_sig_re.match(sig)
|
||||||
|
if m is None:
|
||||||
|
raise ValueError
|
||||||
|
name, args = m.groups()
|
||||||
|
fullname = name.replace('(', '').replace(')', '')
|
||||||
|
signode += addnodes.desc_name(name, name)
|
||||||
|
if args:
|
||||||
|
signode += addnodes.desc_addname(' '+args, ' '+args)
|
||||||
|
return fullname
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_role('issue', issue_role)
|
app.add_role('issue', issue_role)
|
||||||
app.add_directive('impl-detail', ImplementationDetail)
|
app.add_directive('impl-detail', ImplementationDetail)
|
||||||
|
|
@ -172,4 +194,6 @@ def setup(app):
|
||||||
app.add_builder(suspicious.CheckSuspiciousMarkupBuilder)
|
app.add_builder(suspicious.CheckSuspiciousMarkupBuilder)
|
||||||
app.add_description_unit('opcode', 'opcode', '%s (opcode)',
|
app.add_description_unit('opcode', 'opcode', '%s (opcode)',
|
||||||
parse_opcode_signature)
|
parse_opcode_signature)
|
||||||
|
app.add_description_unit('pdbcommand', 'pdbcmd', '%s (pdb command)',
|
||||||
|
parse_pdb_command)
|
||||||
app.add_description_unit('2to3fixer', '2to3fixer', '%s (2to3 fixer)')
|
app.add_description_unit('2to3fixer', '2to3fixer', '%s (2to3 fixer)')
|
||||||
|
|
|
||||||
202
Lib/pdb.doc
202
Lib/pdb.doc
|
|
@ -1,202 +0,0 @@
|
||||||
The Python Debugger Pdb
|
|
||||||
=======================
|
|
||||||
|
|
||||||
To use the debugger in its simplest form:
|
|
||||||
|
|
||||||
>>> import pdb
|
|
||||||
>>> pdb.run('<a statement>')
|
|
||||||
|
|
||||||
The debugger's prompt is '(Pdb) '. This will stop in the first
|
|
||||||
function call in <a statement>.
|
|
||||||
|
|
||||||
Alternatively, if a statement terminated with an unhandled exception,
|
|
||||||
you can use pdb's post-mortem facility to inspect the contents of the
|
|
||||||
traceback:
|
|
||||||
|
|
||||||
>>> <a statement>
|
|
||||||
<exception traceback>
|
|
||||||
>>> import pdb
|
|
||||||
>>> pdb.pm()
|
|
||||||
|
|
||||||
The commands recognized by the debugger are listed in the next
|
|
||||||
section. Most can be abbreviated as indicated; e.g., h(elp) means
|
|
||||||
that 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel',
|
|
||||||
nor as 'H' or 'Help' or 'HELP'). Optional arguments are enclosed in
|
|
||||||
square brackets.
|
|
||||||
|
|
||||||
A blank line repeats the previous command literally, except for
|
|
||||||
'list', where it lists the next 11 lines.
|
|
||||||
|
|
||||||
Commands that the debugger doesn't recognize are assumed to be Python
|
|
||||||
statements and are executed in the context of the program being
|
|
||||||
debugged. Python statements can also be prefixed with an exclamation
|
|
||||||
point ('!'). This is a powerful way to inspect the program being
|
|
||||||
debugged; it is even possible to change variables. When an exception
|
|
||||||
occurs in such a statement, the exception name is printed but the
|
|
||||||
debugger's state is not changed.
|
|
||||||
|
|
||||||
The debugger supports aliases, which can save typing. And aliases can
|
|
||||||
have parameters (see the alias help entry) which allows one a certain
|
|
||||||
level of adaptability to the context under examination.
|
|
||||||
|
|
||||||
Multiple commands may be entered on a single line, separated by the
|
|
||||||
pair ';;'. No intelligence is applied to separating the commands; the
|
|
||||||
input is split at the first ';;', even if it is in the middle of a
|
|
||||||
quoted string.
|
|
||||||
|
|
||||||
If a file ".pdbrc" exists in your home directory or in the current
|
|
||||||
directory, it is read in and executed as if it had been typed at the
|
|
||||||
debugger prompt. This is particularly useful for aliases. If both
|
|
||||||
files exist, the one in the home directory is read first and aliases
|
|
||||||
defined there can be overriden by the local file.
|
|
||||||
|
|
||||||
Aside from aliases, the debugger is not directly programmable; but it
|
|
||||||
is implemented as a class from which you can derive your own debugger
|
|
||||||
class, which you can make as fancy as you like.
|
|
||||||
|
|
||||||
|
|
||||||
Debugger commands
|
|
||||||
=================
|
|
||||||
|
|
||||||
h(elp)
|
|
||||||
Without argument, print the list of available commands. With
|
|
||||||
a command name as argument, print help about that command
|
|
||||||
(this is currently not implemented).
|
|
||||||
|
|
||||||
w(here)
|
|
||||||
Print a stack trace, with the most recent frame at the bottom.
|
|
||||||
An arrow indicates the "current frame", which determines the
|
|
||||||
context of most commands.
|
|
||||||
|
|
||||||
d(own) [ count ]
|
|
||||||
Move the current frame count (default one) levels down in the
|
|
||||||
stack trace (to a newer frame).
|
|
||||||
|
|
||||||
u(p) [ count ]
|
|
||||||
Move the current frame count (default one) levels up in the
|
|
||||||
stack trace (to an older frame).
|
|
||||||
|
|
||||||
b(reak) [ ([filename:]lineno | function) [, condition] ]
|
|
||||||
With a filename:line number argument, set a break there. If
|
|
||||||
filename is omitted, use the current file. With a function
|
|
||||||
name, set a break at the first executable line of that
|
|
||||||
function. Without argument, list all breaks. Each breakpoint
|
|
||||||
is assigned a number to which all the other breakpoint
|
|
||||||
commands refer.
|
|
||||||
|
|
||||||
The condition argument, if present, is a string which must
|
|
||||||
evaluate to true in order for the breakpoint to be honored.
|
|
||||||
|
|
||||||
tbreak [ ([filename:]lineno | function) [, condition] ]
|
|
||||||
Temporary breakpoint, which is removed automatically when it
|
|
||||||
is first hit. The arguments are the same as break.
|
|
||||||
|
|
||||||
cl(ear) [bpnumber [bpnumber ...] ]
|
|
||||||
With a space separated list of breakpoint numbers, clear those
|
|
||||||
breakpoints. Without argument, clear all breaks (but first
|
|
||||||
ask confirmation).
|
|
||||||
|
|
||||||
disable bpnumber [bpnumber ...]
|
|
||||||
Disables the breakpoints given as a space separated list of
|
|
||||||
breakpoint numbers. Disabling a breakpoint means it cannot
|
|
||||||
cause the program to stop execution, but unlike clearing a
|
|
||||||
breakpoint, it remains in the list of breakpoints and can be
|
|
||||||
(re-)enabled.
|
|
||||||
|
|
||||||
enable bpnumber [bpnumber ...]
|
|
||||||
Enables the breakpoints specified.
|
|
||||||
|
|
||||||
ignore bpnumber count
|
|
||||||
Sets the ignore count for the given breakpoint number. If
|
|
||||||
count is omitted, the ignore count is set to 0. A breakpoint
|
|
||||||
becomes active when the ignore count is zero. When non-zero,
|
|
||||||
the count is decremented each time the breakpoint is reached
|
|
||||||
and the breakpoint is not disabled and any associated
|
|
||||||
condition evaluates to true.
|
|
||||||
|
|
||||||
condition bpnumber condition
|
|
||||||
condition is an expression which must evaluate to true before
|
|
||||||
the breakpoint is honored. If condition is absent, any
|
|
||||||
existing condition is removed; i.e., the breakpoint is made
|
|
||||||
unconditional.
|
|
||||||
|
|
||||||
s(tep)
|
|
||||||
Execute the current line, stop at the first possible occasion
|
|
||||||
(either in a function that is called or in the current function).
|
|
||||||
|
|
||||||
n(ext)
|
|
||||||
Continue execution until the next line in the current function
|
|
||||||
is reached or it returns.
|
|
||||||
|
|
||||||
unt(il)
|
|
||||||
Continue execution until the line with a number greater than the
|
|
||||||
current one is reached or until the current frame returns.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
l(ist) [first [,last]]
|
|
||||||
List source code for the current file.
|
|
||||||
Without arguments, list 11 lines around the current line
|
|
||||||
or continue the previous listing.
|
|
||||||
With one argument, list 11 lines starting at that line.
|
|
||||||
With two arguments, list the given range;
|
|
||||||
if the second argument is less than the first, it is a count.
|
|
||||||
|
|
||||||
a(rgs)
|
|
||||||
Print the argument list of the current function.
|
|
||||||
|
|
||||||
p expression
|
|
||||||
Print the value of the expression.
|
|
||||||
|
|
||||||
(!) statement
|
|
||||||
Execute the (one-line) statement in the context of the current
|
|
||||||
stack frame. The exclamation point can be omitted unless the
|
|
||||||
first word of the statement resembles a debugger command. To
|
|
||||||
assign to a global variable you must always prefix the command
|
|
||||||
with a 'global' command, e.g.:
|
|
||||||
(Pdb) global list_options; list_options = ['-l']
|
|
||||||
(Pdb)
|
|
||||||
|
|
||||||
|
|
||||||
whatis arg
|
|
||||||
Prints the type of the argument.
|
|
||||||
|
|
||||||
alias [name [command]]
|
|
||||||
Creates an alias called 'name' that executes 'command'. The
|
|
||||||
command must *not* be enclosed in quotes. Replaceable
|
|
||||||
parameters can be indicated by %1, %2, and so on, while %* is
|
|
||||||
replaced by all the parameters. If no command is given, the
|
|
||||||
current alias for name is shown. If no name is given, all
|
|
||||||
aliases are listed.
|
|
||||||
|
|
||||||
Aliases may be nested and can contain anything that can be
|
|
||||||
legally typed at the pdb prompt. Note! You *can* override
|
|
||||||
internal pdb commands with aliases! Those internal commands
|
|
||||||
are then hidden until the alias is removed. Aliasing is
|
|
||||||
recursively applied to the first word of the command line; all
|
|
||||||
other words in the line are left alone.
|
|
||||||
|
|
||||||
As an example, here are two useful aliases (especially when
|
|
||||||
placed in the .pdbrc file):
|
|
||||||
|
|
||||||
#Print instance variables (usage "pi classInst")
|
|
||||||
alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
|
|
||||||
#Print instance variables in self
|
|
||||||
alias ps pi self
|
|
||||||
|
|
||||||
unalias name
|
|
||||||
Deletes the specified alias.
|
|
||||||
|
|
||||||
q(uit)
|
|
||||||
Quit from the debugger.
|
|
||||||
The program being executed is aborted.
|
|
||||||
226
Lib/pdb.py
226
Lib/pdb.py
|
|
@ -1,8 +1,217 @@
|
||||||
#! /usr/bin/env python3
|
#! /usr/bin/env python3
|
||||||
|
|
||||||
"""A Python debugger."""
|
"""
|
||||||
|
The Python Debugger Pdb
|
||||||
|
=======================
|
||||||
|
|
||||||
# (See pdb.doc for documentation.)
|
To use the debugger in its simplest form:
|
||||||
|
|
||||||
|
>>> import pdb
|
||||||
|
>>> pdb.run('<a statement>')
|
||||||
|
|
||||||
|
The debugger's prompt is '(Pdb) '. This will stop in the first
|
||||||
|
function call in <a statement>.
|
||||||
|
|
||||||
|
Alternatively, if a statement terminated with an unhandled exception,
|
||||||
|
you can use pdb's post-mortem facility to inspect the contents of the
|
||||||
|
traceback:
|
||||||
|
|
||||||
|
>>> <a statement>
|
||||||
|
<exception traceback>
|
||||||
|
>>> import pdb
|
||||||
|
>>> pdb.pm()
|
||||||
|
|
||||||
|
The commands recognized by the debugger are listed in the next
|
||||||
|
section. Most can be abbreviated as indicated; e.g., h(elp) means
|
||||||
|
that 'help' can be typed as 'h' or 'help' (but not as 'he' or 'hel',
|
||||||
|
nor as 'H' or 'Help' or 'HELP'). Optional arguments are enclosed in
|
||||||
|
square brackets. Alternatives in the command syntax are separated
|
||||||
|
by a vertical bar (|).
|
||||||
|
|
||||||
|
A blank line repeats the previous command literally, except for
|
||||||
|
'list', where it lists the next 11 lines.
|
||||||
|
|
||||||
|
Commands that the debugger doesn't recognize are assumed to be Python
|
||||||
|
statements and are executed in the context of the program being
|
||||||
|
debugged. Python statements can also be prefixed with an exclamation
|
||||||
|
point ('!'). This is a powerful way to inspect the program being
|
||||||
|
debugged; it is even possible to change variables or call functions.
|
||||||
|
When an exception occurs in such a statement, the exception name is
|
||||||
|
printed but the debugger's state is not changed.
|
||||||
|
|
||||||
|
The debugger supports aliases, which can save typing. And aliases can
|
||||||
|
have parameters (see the alias help entry) which allows one a certain
|
||||||
|
level of adaptability to the context under examination.
|
||||||
|
|
||||||
|
Multiple commands may be entered on a single line, separated by the
|
||||||
|
pair ';;'. No intelligence is applied to separating the commands; the
|
||||||
|
input is split at the first ';;', even if it is in the middle of a
|
||||||
|
quoted string.
|
||||||
|
|
||||||
|
If a file ".pdbrc" exists in your home directory or in the current
|
||||||
|
directory, it is read in and executed as if it had been typed at the
|
||||||
|
debugger prompt. This is particularly useful for aliases. If both
|
||||||
|
files exist, the one in the home directory is read first and aliases
|
||||||
|
defined there can be overriden by the local file.
|
||||||
|
|
||||||
|
Aside from aliases, the debugger is not directly programmable; but it
|
||||||
|
is implemented as a class from which you can derive your own debugger
|
||||||
|
class, which you can make as fancy as you like.
|
||||||
|
|
||||||
|
|
||||||
|
Debugger commands
|
||||||
|
=================
|
||||||
|
|
||||||
|
h(elp)
|
||||||
|
Without argument, print the list of available commands. With
|
||||||
|
a command name as argument, print help about that command.
|
||||||
|
|
||||||
|
w(here)
|
||||||
|
Print a stack trace, with the most recent frame at the bottom.
|
||||||
|
An arrow indicates the "current frame", which determines the
|
||||||
|
context of most commands.
|
||||||
|
|
||||||
|
d(own) [ count ]
|
||||||
|
Move the current frame count (default one) levels down in the
|
||||||
|
stack trace (to a newer frame).
|
||||||
|
|
||||||
|
u(p) [ count ]
|
||||||
|
Move the current frame count (default one) levels up in the
|
||||||
|
stack trace (to an older frame).
|
||||||
|
|
||||||
|
b(reak) [ ([filename:]lineno | function) [, condition] ]
|
||||||
|
With a filename:lineno argument, set a break there. If
|
||||||
|
filename is omitted, use the current file. With a function
|
||||||
|
name, set a break at the first executable line of that
|
||||||
|
function. Without argument, list all breaks. Each breakpoint
|
||||||
|
is assigned a number to which all the other breakpoint
|
||||||
|
commands refer.
|
||||||
|
|
||||||
|
The condition argument, if present, is a string which must
|
||||||
|
evaluate to true in order for the breakpoint to be honored.
|
||||||
|
|
||||||
|
tbreak [ ([filename:]lineno | function) [, condition] ]
|
||||||
|
Temporary breakpoint, which is removed automatically when it
|
||||||
|
is first hit. The arguments are the same as for break.
|
||||||
|
|
||||||
|
cl(ear) [bpnumber [bpnumber ...] ]
|
||||||
|
With a space separated list of breakpoint numbers, clear those
|
||||||
|
breakpoints. Without argument, clear all breaks (but first
|
||||||
|
ask confirmation).
|
||||||
|
|
||||||
|
disable bpnumber [bpnumber ...]
|
||||||
|
Disable the breakpoints given as a space separated list of
|
||||||
|
breakpoint numbers. Disabling a breakpoint means it cannot
|
||||||
|
cause the program to stop execution, but unlike clearing a
|
||||||
|
breakpoint, it remains in the list of breakpoints and can be
|
||||||
|
(re-)enabled.
|
||||||
|
|
||||||
|
enable bpnumber [bpnumber ...]
|
||||||
|
Enable the breakpoints specified.
|
||||||
|
|
||||||
|
ignore bpnumber [count]
|
||||||
|
Set the ignore count for the given breakpoint number. If
|
||||||
|
count is omitted, the ignore count is set to 0. A breakpoint
|
||||||
|
becomes active when the ignore count is zero. When non-zero,
|
||||||
|
the count is decremented each time the breakpoint is reached
|
||||||
|
and the breakpoint is not disabled and any associated
|
||||||
|
condition evaluates to true.
|
||||||
|
|
||||||
|
condition bpnumber [condition]
|
||||||
|
Set a new condition for the breakpoint, an expression which
|
||||||
|
must evaluate to true before the breakpoint is honored. If
|
||||||
|
condition is absent, any existing condition is removed; i.e.,
|
||||||
|
the breakpoint is made unconditional.
|
||||||
|
|
||||||
|
commands [bpnumber]
|
||||||
|
Specify a list of commands for the breakpoint. Type a line
|
||||||
|
containing just 'end' to terminate the commands. The commands
|
||||||
|
are executed when the breakpoint is hit.
|
||||||
|
|
||||||
|
With no breakpoint number argument, refers to the last
|
||||||
|
breakpoint set.
|
||||||
|
|
||||||
|
s(tep)
|
||||||
|
Execute the current line, stop at the first possible occasion
|
||||||
|
(either in a function that is called or in the current
|
||||||
|
function).
|
||||||
|
|
||||||
|
n(ext)
|
||||||
|
Continue execution until the next line in the current function
|
||||||
|
is reached or it returns.
|
||||||
|
|
||||||
|
unt(il)
|
||||||
|
Continue execution until the line with a number greater than
|
||||||
|
the current one is reached or until the current frame returns.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
l(ist) [first [,last]]
|
||||||
|
List source code for the current file.
|
||||||
|
Without arguments, list 11 lines around the current line
|
||||||
|
or continue the previous listing.
|
||||||
|
With one argument, list 11 lines starting at that line.
|
||||||
|
With two arguments, list the given range;
|
||||||
|
if the second argument is less than the first, it is a count.
|
||||||
|
|
||||||
|
a(rgs)
|
||||||
|
Print the argument list of the current function.
|
||||||
|
|
||||||
|
p expression
|
||||||
|
Print the value of the expression.
|
||||||
|
|
||||||
|
(!) statement
|
||||||
|
Execute the (one-line) statement in the context of the current
|
||||||
|
stack frame. The exclamation point can be omitted unless the
|
||||||
|
first word of the statement resembles a debugger command. To
|
||||||
|
assign to a global variable you must always prefix the command
|
||||||
|
with a 'global' command, e.g.:
|
||||||
|
(Pdb) global list_options; list_options = ['-l']
|
||||||
|
(Pdb)
|
||||||
|
|
||||||
|
|
||||||
|
whatis arg
|
||||||
|
Print the type of the argument.
|
||||||
|
|
||||||
|
alias [name [command]]
|
||||||
|
Creates an alias called 'name' that executes 'command'. The
|
||||||
|
command must *not* be enclosed in quotes. Replaceable
|
||||||
|
parameters can be indicated by %1, %2, and so on, while %* is
|
||||||
|
replaced by all the parameters. If no command is given, the
|
||||||
|
current alias for name is shown. If no name is given, all
|
||||||
|
aliases are listed.
|
||||||
|
|
||||||
|
Aliases may be nested and can contain anything that can be
|
||||||
|
legally typed at the pdb prompt. Note! You *can* override
|
||||||
|
internal pdb commands with aliases! Those internal commands
|
||||||
|
are then hidden until the alias is removed. Aliasing is
|
||||||
|
recursively applied to the first word of the command line; all
|
||||||
|
other words in the line are left alone.
|
||||||
|
|
||||||
|
As an example, here are two useful aliases (especially when
|
||||||
|
placed in the .pdbrc file):
|
||||||
|
|
||||||
|
# Print instance variables (usage "pi classInst")
|
||||||
|
alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
|
||||||
|
# Print instance variables in self
|
||||||
|
alias ps pi self
|
||||||
|
|
||||||
|
unalias name
|
||||||
|
Delete the specified alias.
|
||||||
|
|
||||||
|
q(uit)
|
||||||
|
Quit from the debugger. The program being executed is aborted.
|
||||||
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import linecache
|
import linecache
|
||||||
|
|
@ -905,7 +1114,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
||||||
prompt_prefix), file=self.stdout)
|
prompt_prefix), file=self.stdout)
|
||||||
|
|
||||||
|
|
||||||
# Help methods (derived from pdb.doc)
|
# Help methods (derived from docstring)
|
||||||
|
|
||||||
def help_help(self):
|
def help_help(self):
|
||||||
self.help_h()
|
self.help_h()
|
||||||
|
|
@ -1281,15 +1490,8 @@ def test():
|
||||||
|
|
||||||
# print help
|
# print help
|
||||||
def help():
|
def help():
|
||||||
for dirname in sys.path:
|
import pydoc
|
||||||
fullname = os.path.join(dirname, 'pdb.doc')
|
pydoc.pager(__doc__)
|
||||||
if os.path.exists(fullname):
|
|
||||||
sts = os.system('${PAGER-more} '+fullname)
|
|
||||||
if sts: print('*** Pager exit status:', sts)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
print('Sorry, can\'t find the help file "pdb.doc"', end=' ')
|
|
||||||
print('along the Python search path')
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"):
|
if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue