17db96d56Sopenharmony_ci.. _debugger:
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci:mod:`pdb` --- The Python Debugger
47db96d56Sopenharmony_ci==================================
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci.. module:: pdb
77db96d56Sopenharmony_ci   :synopsis: The Python debugger for interactive interpreters.
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci**Source code:** :source:`Lib/pdb.py`
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci.. index:: single: debugging
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci--------------
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciThe module :mod:`pdb` defines an interactive source code debugger for Python
167db96d56Sopenharmony_ciprograms.  It supports setting (conditional) breakpoints and single stepping at
177db96d56Sopenharmony_cithe source line level, inspection of stack frames, source code listing, and
187db96d56Sopenharmony_cievaluation of arbitrary Python code in the context of any stack frame.  It also
197db96d56Sopenharmony_cisupports post-mortem debugging and can be called under program control.
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci.. index::
227db96d56Sopenharmony_ci   single: Pdb (class in pdb)
237db96d56Sopenharmony_ci   pair: module; bdb
247db96d56Sopenharmony_ci   pair: module; cmd
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciThe debugger is extensible -- it is actually defined as the class :class:`Pdb`.
277db96d56Sopenharmony_ciThis is currently undocumented but easily understood by reading the source.  The
287db96d56Sopenharmony_ciextension interface uses the modules :mod:`bdb` and :mod:`cmd`.
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci.. seealso::
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci   Module :mod:`faulthandler`
337db96d56Sopenharmony_ci      Used to dump Python tracebacks explicitly, on a fault, after a timeout,
347db96d56Sopenharmony_ci      or on a user signal.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci   Module :mod:`traceback`
377db96d56Sopenharmony_ci      Standard interface to extract, format and print stack traces of Python programs.
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ciThe typical usage to break into the debugger is to insert::
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   import pdb; pdb.set_trace()
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ciOr::
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci   breakpoint()
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ciat the location you want to break into the debugger, and then run the program.
487db96d56Sopenharmony_ciYou can then step through the code following this statement, and continue
497db96d56Sopenharmony_cirunning without the debugger using the :pdbcmd:`continue` command.
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci.. versionadded:: 3.7
527db96d56Sopenharmony_ci   The built-in :func:`breakpoint()`, when called with defaults, can be used
537db96d56Sopenharmony_ci   instead of ``import pdb; pdb.set_trace()``.
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci::
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci   def double(x):
587db96d56Sopenharmony_ci      breakpoint()
597db96d56Sopenharmony_ci      return x * 2
607db96d56Sopenharmony_ci   val = 3
617db96d56Sopenharmony_ci   print(f"{val} * 2 is {double(val)}")
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ciThe debugger's prompt is ``(Pdb)``, which is the indicator that you are in debug mode::
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci   > ...(3)double()
667db96d56Sopenharmony_ci   -> return x * 2
677db96d56Sopenharmony_ci   (Pdb) p x
687db96d56Sopenharmony_ci   3
697db96d56Sopenharmony_ci   (Pdb) continue
707db96d56Sopenharmony_ci   3 * 2 is 6
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci.. versionchanged:: 3.3
737db96d56Sopenharmony_ci   Tab-completion via the :mod:`readline` module is available for commands and
747db96d56Sopenharmony_ci   command arguments, e.g. the current global and local names are offered as
757db96d56Sopenharmony_ci   arguments of the ``p`` command.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ciYou can also invoke :mod:`pdb` from the command line to debug other scripts.  For
797db96d56Sopenharmony_ciexample::
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci   python -m pdb myscript.py
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ciWhen invoked as a module, pdb will automatically enter post-mortem debugging if
847db96d56Sopenharmony_cithe program being debugged exits abnormally.  After post-mortem debugging (or
857db96d56Sopenharmony_ciafter normal exit of the program), pdb will restart the program.  Automatic
867db96d56Sopenharmony_cirestarting preserves pdb's state (such as breakpoints) and in most cases is more
877db96d56Sopenharmony_ciuseful than quitting the debugger upon program's exit.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci.. versionadded:: 3.2
907db96d56Sopenharmony_ci   ``-c`` option is introduced to execute commands as if given
917db96d56Sopenharmony_ci   in a :file:`.pdbrc` file, see :ref:`debugger-commands`.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci.. versionadded:: 3.7
947db96d56Sopenharmony_ci   ``-m`` option is introduced to execute modules similar to the way
957db96d56Sopenharmony_ci   ``python -m`` does. As with a script, the debugger will pause execution just
967db96d56Sopenharmony_ci   before the first line of the module.
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ciTypical usage to execute a statement under control of the debugger is::
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   >>> import pdb
1017db96d56Sopenharmony_ci   >>> def f(x):
1027db96d56Sopenharmony_ci   ...     print(1 / x)
1037db96d56Sopenharmony_ci   >>> pdb.run("f(2)")
1047db96d56Sopenharmony_ci   > <string>(1)<module>()
1057db96d56Sopenharmony_ci   (Pdb) continue
1067db96d56Sopenharmony_ci   0.5
1077db96d56Sopenharmony_ci   >>>
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ciThe typical usage to inspect a crashed program is::
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci   >>> import pdb
1127db96d56Sopenharmony_ci   >>> def f(x):
1137db96d56Sopenharmony_ci   ...     print(1 / x)
1147db96d56Sopenharmony_ci   ...
1157db96d56Sopenharmony_ci   >>> f(0)
1167db96d56Sopenharmony_ci   Traceback (most recent call last):
1177db96d56Sopenharmony_ci     File "<stdin>", line 1, in <module>
1187db96d56Sopenharmony_ci     File "<stdin>", line 2, in f
1197db96d56Sopenharmony_ci   ZeroDivisionError: division by zero
1207db96d56Sopenharmony_ci   >>> pdb.pm()
1217db96d56Sopenharmony_ci   > <stdin>(2)f()
1227db96d56Sopenharmony_ci   (Pdb) p x
1237db96d56Sopenharmony_ci   0
1247db96d56Sopenharmony_ci   (Pdb)
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ciThe module defines the following functions; each enters the debugger in a
1287db96d56Sopenharmony_cislightly different way:
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci.. function:: run(statement, globals=None, locals=None)
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci   Execute the *statement* (given as a string or a code object) under debugger
1337db96d56Sopenharmony_ci   control.  The debugger prompt appears before any code is executed; you can
1347db96d56Sopenharmony_ci   set breakpoints and type :pdbcmd:`continue`, or you can step through the
1357db96d56Sopenharmony_ci   statement using :pdbcmd:`step` or :pdbcmd:`next` (all these commands are
1367db96d56Sopenharmony_ci   explained below).  The optional *globals* and *locals* arguments specify the
1377db96d56Sopenharmony_ci   environment in which the code is executed; by default the dictionary of the
1387db96d56Sopenharmony_ci   module :mod:`__main__` is used.  (See the explanation of the built-in
1397db96d56Sopenharmony_ci   :func:`exec` or :func:`eval` functions.)
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci.. function:: runeval(expression, globals=None, locals=None)
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci   Evaluate the *expression* (given as a string or a code object) under debugger
1457db96d56Sopenharmony_ci   control.  When :func:`runeval` returns, it returns the value of the
1467db96d56Sopenharmony_ci   *expression*.  Otherwise this function is similar to :func:`run`.
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci.. function:: runcall(function, *args, **kwds)
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci   Call the *function* (a function or method object, not a string) with the
1527db96d56Sopenharmony_ci   given arguments.  When :func:`runcall` returns, it returns whatever the
1537db96d56Sopenharmony_ci   function call returned.  The debugger prompt appears as soon as the function
1547db96d56Sopenharmony_ci   is entered.
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci.. function:: set_trace(*, header=None)
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci   Enter the debugger at the calling stack frame.  This is useful to hard-code
1607db96d56Sopenharmony_ci   a breakpoint at a given point in a program, even if the code is not
1617db96d56Sopenharmony_ci   otherwise being debugged (e.g. when an assertion fails).  If given,
1627db96d56Sopenharmony_ci   *header* is printed to the console just before debugging begins.
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci   .. versionchanged:: 3.7
1657db96d56Sopenharmony_ci      The keyword-only argument *header*.
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci.. function:: post_mortem(traceback=None)
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci   Enter post-mortem debugging of the given *traceback* object.  If no
1717db96d56Sopenharmony_ci   *traceback* is given, it uses the one of the exception that is currently
1727db96d56Sopenharmony_ci   being handled (an exception must be being handled if the default is to be
1737db96d56Sopenharmony_ci   used).
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci.. function:: pm()
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci   Enter post-mortem debugging of the traceback found in
1797db96d56Sopenharmony_ci   :data:`sys.last_traceback`.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ciThe ``run*`` functions and :func:`set_trace` are aliases for instantiating the
1837db96d56Sopenharmony_ci:class:`Pdb` class and calling the method of the same name.  If you want to
1847db96d56Sopenharmony_ciaccess further features, you have to do this yourself:
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci.. class:: Pdb(completekey='tab', stdin=None, stdout=None, skip=None, \
1877db96d56Sopenharmony_ci               nosigint=False, readrc=True)
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci   :class:`Pdb` is the debugger class.
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci   The *completekey*, *stdin* and *stdout* arguments are passed to the
1927db96d56Sopenharmony_ci   underlying :class:`cmd.Cmd` class; see the description there.
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci   The *skip* argument, if given, must be an iterable of glob-style module name
1957db96d56Sopenharmony_ci   patterns.  The debugger will not step into frames that originate in a module
1967db96d56Sopenharmony_ci   that matches one of these patterns. [1]_
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci   By default, Pdb sets a handler for the SIGINT signal (which is sent when the
1997db96d56Sopenharmony_ci   user presses :kbd:`Ctrl-C` on the console) when you give a :pdbcmd:`continue` command.
2007db96d56Sopenharmony_ci   This allows you to break into the debugger again by pressing :kbd:`Ctrl-C`.  If you
2017db96d56Sopenharmony_ci   want Pdb not to touch the SIGINT handler, set *nosigint* to true.
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   The *readrc* argument defaults to true and controls whether Pdb will load
2047db96d56Sopenharmony_ci   .pdbrc files from the filesystem.
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci   Example call to enable tracing with *skip*::
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci      import pdb; pdb.Pdb(skip=['django.*']).set_trace()
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci   .. audit-event:: pdb.Pdb "" pdb.Pdb
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci   .. versionadded:: 3.1
2137db96d56Sopenharmony_ci      The *skip* argument.
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci   .. versionadded:: 3.2
2167db96d56Sopenharmony_ci      The *nosigint* argument.  Previously, a SIGINT handler was never set by
2177db96d56Sopenharmony_ci      Pdb.
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci   .. versionchanged:: 3.6
2207db96d56Sopenharmony_ci      The *readrc* argument.
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci   .. method:: run(statement, globals=None, locals=None)
2237db96d56Sopenharmony_ci               runeval(expression, globals=None, locals=None)
2247db96d56Sopenharmony_ci               runcall(function, *args, **kwds)
2257db96d56Sopenharmony_ci               set_trace()
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci      See the documentation for the functions explained above.
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci.. _debugger-commands:
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ciDebugger Commands
2337db96d56Sopenharmony_ci-----------------
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ciThe commands recognized by the debugger are listed below.  Most commands can be
2367db96d56Sopenharmony_ciabbreviated to one or two letters as indicated; e.g. ``h(elp)`` means that
2377db96d56Sopenharmony_cieither ``h`` or ``help`` can be used to enter the help command (but not ``he``
2387db96d56Sopenharmony_cior ``hel``, nor ``H`` or ``Help`` or ``HELP``).  Arguments to commands must be
2397db96d56Sopenharmony_ciseparated by whitespace (spaces or tabs).  Optional arguments are enclosed in
2407db96d56Sopenharmony_cisquare brackets (``[]``) in the command syntax; the square brackets must not be
2417db96d56Sopenharmony_cityped.  Alternatives in the command syntax are separated by a vertical bar
2427db96d56Sopenharmony_ci(``|``).
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ciEntering a blank line repeats the last command entered.  Exception: if the last
2457db96d56Sopenharmony_cicommand was a :pdbcmd:`list` command, the next 11 lines are listed.
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ciCommands that the debugger doesn't recognize are assumed to be Python statements
2487db96d56Sopenharmony_ciand are executed in the context of the program being debugged.  Python
2497db96d56Sopenharmony_cistatements can also be prefixed with an exclamation point (``!``).  This is a
2507db96d56Sopenharmony_cipowerful way to inspect the program being debugged; it is even possible to
2517db96d56Sopenharmony_cichange a variable or call a function.  When an exception occurs in such a
2527db96d56Sopenharmony_cistatement, the exception name is printed but the debugger's state is not
2537db96d56Sopenharmony_cichanged.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ciThe debugger supports :ref:`aliases <debugger-aliases>`.  Aliases can have
2567db96d56Sopenharmony_ciparameters which allows one a certain level of adaptability to the context under
2577db96d56Sopenharmony_ciexamination.
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ciMultiple commands may be entered on a single line, separated by ``;;``.  (A
2607db96d56Sopenharmony_cisingle ``;`` is not used as it is the separator for multiple commands in a line
2617db96d56Sopenharmony_cithat is passed to the Python parser.)  No intelligence is applied to separating
2627db96d56Sopenharmony_cithe commands; the input is split at the first ``;;`` pair, even if it is in the
2637db96d56Sopenharmony_cimiddle of a quoted string. A workaround for strings with double semicolons
2647db96d56Sopenharmony_ciis to use implicit string concatenation ``';'';'`` or ``";"";"``.
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci.. index::
2677db96d56Sopenharmony_ci   pair: .pdbrc; file
2687db96d56Sopenharmony_ci   triple: debugger; configuration; file
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ciIf a file :file:`.pdbrc` exists in the user's home directory or in the current
2717db96d56Sopenharmony_cidirectory, it is read with ``'utf-8'`` encoding and executed as if it had been
2727db96d56Sopenharmony_cityped at the debugger prompt.  This is particularly useful for aliases.  If both
2737db96d56Sopenharmony_cifiles exist, the one in the home directory is read first and aliases defined there
2747db96d56Sopenharmony_cican be overridden by the local file.
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci.. versionchanged:: 3.11
2777db96d56Sopenharmony_ci   :file:`.pdbrc` is now read with ``'utf-8'`` encoding. Previously, it was read
2787db96d56Sopenharmony_ci   with the system locale encoding.
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci.. versionchanged:: 3.2
2817db96d56Sopenharmony_ci   :file:`.pdbrc` can now contain commands that continue debugging, such as
2827db96d56Sopenharmony_ci   :pdbcmd:`continue` or :pdbcmd:`next`.  Previously, these commands had no
2837db96d56Sopenharmony_ci   effect.
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci.. pdbcommand:: h(elp) [command]
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci   Without argument, print the list of available commands.  With a *command* as
2897db96d56Sopenharmony_ci   argument, print help about that command.  ``help pdb`` displays the full
2907db96d56Sopenharmony_ci   documentation (the docstring of the :mod:`pdb` module).  Since the *command*
2917db96d56Sopenharmony_ci   argument must be an identifier, ``help exec`` must be entered to get help on
2927db96d56Sopenharmony_ci   the ``!`` command.
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci.. pdbcommand:: w(here)
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci   Print a stack trace, with the most recent frame at the bottom.  An arrow (``>``)
2977db96d56Sopenharmony_ci   indicates the current frame, which determines the context of most commands.
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci.. pdbcommand:: d(own) [count]
3007db96d56Sopenharmony_ci
3017db96d56Sopenharmony_ci   Move the current frame *count* (default one) levels down in the stack trace
3027db96d56Sopenharmony_ci   (to a newer frame).
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci.. pdbcommand:: u(p) [count]
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci   Move the current frame *count* (default one) levels up in the stack trace (to
3077db96d56Sopenharmony_ci   an older frame).
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci.. pdbcommand:: b(reak) [([filename:]lineno | function) [, condition]]
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci   With a *lineno* argument, set a break there in the current file.  With a
3127db96d56Sopenharmony_ci   *function* argument, set a break at the first executable statement within
3137db96d56Sopenharmony_ci   that function.  The line number may be prefixed with a filename and a colon,
3147db96d56Sopenharmony_ci   to specify a breakpoint in another file (probably one that hasn't been loaded
3157db96d56Sopenharmony_ci   yet).  The file is searched on :data:`sys.path`.  Note that each breakpoint
3167db96d56Sopenharmony_ci   is assigned a number to which all the other breakpoint commands refer.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci   If a second argument is present, it is an expression which must evaluate to
3197db96d56Sopenharmony_ci   true before the breakpoint is honored.
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci   Without argument, list all breaks, including for each breakpoint, the number
3227db96d56Sopenharmony_ci   of times that breakpoint has been hit, the current ignore count, and the
3237db96d56Sopenharmony_ci   associated condition if any.
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci.. pdbcommand:: tbreak [([filename:]lineno | function) [, condition]]
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci   Temporary breakpoint, which is removed automatically when it is first hit.
3287db96d56Sopenharmony_ci   The arguments are the same as for :pdbcmd:`break`.
3297db96d56Sopenharmony_ci
3307db96d56Sopenharmony_ci.. pdbcommand:: cl(ear) [filename:lineno | bpnumber ...]
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci   With a *filename:lineno* argument, clear all the breakpoints at this line.
3337db96d56Sopenharmony_ci   With a space separated list of breakpoint numbers, clear those breakpoints.
3347db96d56Sopenharmony_ci   Without argument, clear all breaks (but first ask confirmation).
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_ci.. pdbcommand:: disable [bpnumber ...]
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci   Disable the breakpoints given as a space separated list of breakpoint
3397db96d56Sopenharmony_ci   numbers.  Disabling a breakpoint means it cannot cause the program to stop
3407db96d56Sopenharmony_ci   execution, but unlike clearing a breakpoint, it remains in the list of
3417db96d56Sopenharmony_ci   breakpoints and can be (re-)enabled.
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci.. pdbcommand:: enable [bpnumber ...]
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci   Enable the breakpoints specified.
3467db96d56Sopenharmony_ci
3477db96d56Sopenharmony_ci.. pdbcommand:: ignore bpnumber [count]
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci   Set the ignore count for the given breakpoint number.  If *count* is omitted,
3507db96d56Sopenharmony_ci   the ignore count is set to 0.  A breakpoint becomes active when the ignore
3517db96d56Sopenharmony_ci   count is zero.  When non-zero, the *count* is decremented each time the
3527db96d56Sopenharmony_ci   breakpoint is reached and the breakpoint is not disabled and any associated
3537db96d56Sopenharmony_ci   condition evaluates to true.
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci.. pdbcommand:: condition bpnumber [condition]
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci   Set a new *condition* for the breakpoint, an expression which must evaluate
3587db96d56Sopenharmony_ci   to true before the breakpoint is honored.  If *condition* is absent, any
3597db96d56Sopenharmony_ci   existing condition is removed; i.e., the breakpoint is made unconditional.
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci.. pdbcommand:: commands [bpnumber]
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci   Specify a list of commands for breakpoint number *bpnumber*.  The commands
3647db96d56Sopenharmony_ci   themselves appear on the following lines.  Type a line containing just
3657db96d56Sopenharmony_ci   ``end`` to terminate the commands. An example::
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ci      (Pdb) commands 1
3687db96d56Sopenharmony_ci      (com) p some_variable
3697db96d56Sopenharmony_ci      (com) end
3707db96d56Sopenharmony_ci      (Pdb)
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci   To remove all commands from a breakpoint, type ``commands`` and follow it
3737db96d56Sopenharmony_ci   immediately with ``end``; that is, give no commands.
3747db96d56Sopenharmony_ci
3757db96d56Sopenharmony_ci   With no *bpnumber* argument, ``commands`` refers to the last breakpoint set.
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci   You can use breakpoint commands to start your program up again.  Simply use
3787db96d56Sopenharmony_ci   the :pdbcmd:`continue` command, or :pdbcmd:`step`,
3797db96d56Sopenharmony_ci   or any other command that resumes execution.
3807db96d56Sopenharmony_ci
3817db96d56Sopenharmony_ci   Specifying any command resuming execution
3827db96d56Sopenharmony_ci   (currently :pdbcmd:`continue`, :pdbcmd:`step`, :pdbcmd:`next`,
3837db96d56Sopenharmony_ci   :pdbcmd:`return`, :pdbcmd:`jump`, :pdbcmd:`quit` and their abbreviations)
3847db96d56Sopenharmony_ci   terminates the command list (as if
3857db96d56Sopenharmony_ci   that command was immediately followed by end). This is because any time you
3867db96d56Sopenharmony_ci   resume execution (even with a simple next or step), you may encounter another
3877db96d56Sopenharmony_ci   breakpoint—which could have its own command list, leading to ambiguities about
3887db96d56Sopenharmony_ci   which list to execute.
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci   If you use the ``silent`` command in the command list, the usual message about
3917db96d56Sopenharmony_ci   stopping at a breakpoint is not printed.  This may be desirable for breakpoints
3927db96d56Sopenharmony_ci   that are to print a specific message and then continue.  If none of the other
3937db96d56Sopenharmony_ci   commands print anything, you see no sign that the breakpoint was reached.
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci.. pdbcommand:: s(tep)
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci   Execute the current line, stop at the first possible occasion (either in a
3987db96d56Sopenharmony_ci   function that is called or on the next line in the current function).
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci.. pdbcommand:: n(ext)
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci   Continue execution until the next line in the current function is reached or
4037db96d56Sopenharmony_ci   it returns.  (The difference between :pdbcmd:`next` and :pdbcmd:`step` is
4047db96d56Sopenharmony_ci   that :pdbcmd:`step` stops inside a called function, while :pdbcmd:`next`
4057db96d56Sopenharmony_ci   executes called functions at (nearly) full speed, only stopping at the next
4067db96d56Sopenharmony_ci   line in the current function.)
4077db96d56Sopenharmony_ci
4087db96d56Sopenharmony_ci.. pdbcommand:: unt(il) [lineno]
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   Without argument, continue execution until the line with a number greater
4117db96d56Sopenharmony_ci   than the current one is reached.
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci   With *lineno*, continue execution until a line with a number greater or
4147db96d56Sopenharmony_ci   equal to *lineno* is reached.  In both cases, also stop when the current frame
4157db96d56Sopenharmony_ci   returns.
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci   .. versionchanged:: 3.2
4187db96d56Sopenharmony_ci      Allow giving an explicit line number.
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci.. pdbcommand:: r(eturn)
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci   Continue execution until the current function returns.
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_ci.. pdbcommand:: c(ont(inue))
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci   Continue execution, only stop when a breakpoint is encountered.
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci.. pdbcommand:: j(ump) lineno
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci   Set the next line that will be executed.  Only available in the bottom-most
4317db96d56Sopenharmony_ci   frame.  This lets you jump back and execute code again, or jump forward to
4327db96d56Sopenharmony_ci   skip code that you don't want to run.
4337db96d56Sopenharmony_ci
4347db96d56Sopenharmony_ci   It should be noted that not all jumps are allowed -- for instance it is not
4357db96d56Sopenharmony_ci   possible to jump into the middle of a :keyword:`for` loop or out of a
4367db96d56Sopenharmony_ci   :keyword:`finally` clause.
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ci.. pdbcommand:: l(ist) [first[, last]]
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_ci   List source code for the current file.  Without arguments, list 11 lines
4417db96d56Sopenharmony_ci   around the current line or continue the previous listing.  With ``.`` as
4427db96d56Sopenharmony_ci   argument, list 11 lines around the current line.  With one argument,
4437db96d56Sopenharmony_ci   list 11 lines around at that line.  With two arguments, list the given range;
4447db96d56Sopenharmony_ci   if the second argument is less than the first, it is interpreted as a count.
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ci   The current line in the current frame is indicated by ``->``.  If an
4477db96d56Sopenharmony_ci   exception is being debugged, the line where the exception was originally
4487db96d56Sopenharmony_ci   raised or propagated is indicated by ``>>``, if it differs from the current
4497db96d56Sopenharmony_ci   line.
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ci   .. versionadded:: 3.2
4527db96d56Sopenharmony_ci      The ``>>`` marker.
4537db96d56Sopenharmony_ci
4547db96d56Sopenharmony_ci.. pdbcommand:: ll | longlist
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci   List all source code for the current function or frame.  Interesting lines
4577db96d56Sopenharmony_ci   are marked as for :pdbcmd:`list`.
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ci   .. versionadded:: 3.2
4607db96d56Sopenharmony_ci
4617db96d56Sopenharmony_ci.. pdbcommand:: a(rgs)
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci   Print the arguments of the current function and their current values.
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci.. pdbcommand:: p expression
4667db96d56Sopenharmony_ci
4677db96d56Sopenharmony_ci   Evaluate *expression* in the current context and print its value.
4687db96d56Sopenharmony_ci
4697db96d56Sopenharmony_ci   .. note::
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci      ``print()`` can also be used, but is not a debugger command --- this executes the
4727db96d56Sopenharmony_ci      Python :func:`print` function.
4737db96d56Sopenharmony_ci
4747db96d56Sopenharmony_ci
4757db96d56Sopenharmony_ci.. pdbcommand:: pp expression
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ci   Like the :pdbcmd:`p` command, except the value of *expression* is
4787db96d56Sopenharmony_ci   pretty-printed using the :mod:`pprint` module.
4797db96d56Sopenharmony_ci
4807db96d56Sopenharmony_ci.. pdbcommand:: whatis expression
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ci   Print the type of *expression*.
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci.. pdbcommand:: source expression
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci   Try to get source code of *expression* and display it.
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci   .. versionadded:: 3.2
4897db96d56Sopenharmony_ci
4907db96d56Sopenharmony_ci.. pdbcommand:: display [expression]
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci   Display the value of *expression* if it changed, each time execution stops
4937db96d56Sopenharmony_ci   in the current frame.
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci   Without *expression*, list all display expressions for the current frame.
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci   .. note::
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci      Display evaluates *expression* and compares to the result of the previous
5007db96d56Sopenharmony_ci      evaluation of *expression*, so when the result is mutable, display may not
5017db96d56Sopenharmony_ci      be able to pick up the changes.
5027db96d56Sopenharmony_ci
5037db96d56Sopenharmony_ci   Example::
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci      lst = []
5067db96d56Sopenharmony_ci      breakpoint()
5077db96d56Sopenharmony_ci      pass
5087db96d56Sopenharmony_ci      lst.append(1)
5097db96d56Sopenharmony_ci      print(lst)
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci   Display won't realize ``lst`` has been changed because the result of evaluation
5127db96d56Sopenharmony_ci   is modified in place by ``lst.append(1)`` before being compared::
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci      > example.py(3)<module>()
5157db96d56Sopenharmony_ci      -> pass
5167db96d56Sopenharmony_ci      (Pdb) display lst
5177db96d56Sopenharmony_ci      display lst: []
5187db96d56Sopenharmony_ci      (Pdb) n
5197db96d56Sopenharmony_ci      > example.py(4)<module>()
5207db96d56Sopenharmony_ci      -> lst.append(1)
5217db96d56Sopenharmony_ci      (Pdb) n
5227db96d56Sopenharmony_ci      > example.py(5)<module>()
5237db96d56Sopenharmony_ci      -> print(lst)
5247db96d56Sopenharmony_ci      (Pdb)
5257db96d56Sopenharmony_ci
5267db96d56Sopenharmony_ci   You can do some tricks with copy mechanism to make it work::
5277db96d56Sopenharmony_ci
5287db96d56Sopenharmony_ci      > example.py(3)<module>()
5297db96d56Sopenharmony_ci      -> pass
5307db96d56Sopenharmony_ci      (Pdb) display lst[:]
5317db96d56Sopenharmony_ci      display lst[:]: []
5327db96d56Sopenharmony_ci      (Pdb) n
5337db96d56Sopenharmony_ci      > example.py(4)<module>()
5347db96d56Sopenharmony_ci      -> lst.append(1)
5357db96d56Sopenharmony_ci      (Pdb) n
5367db96d56Sopenharmony_ci      > example.py(5)<module>()
5377db96d56Sopenharmony_ci      -> print(lst)
5387db96d56Sopenharmony_ci      display lst[:]: [1]  [old: []]
5397db96d56Sopenharmony_ci      (Pdb)
5407db96d56Sopenharmony_ci
5417db96d56Sopenharmony_ci   .. versionadded:: 3.2
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci.. pdbcommand:: undisplay [expression]
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci   Do not display *expression* anymore in the current frame.  Without
5467db96d56Sopenharmony_ci   *expression*, clear all display expressions for the current frame.
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci   .. versionadded:: 3.2
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci.. pdbcommand:: interact
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci   Start an interactive interpreter (using the :mod:`code` module) whose global
5537db96d56Sopenharmony_ci   namespace contains all the (global and local) names found in the current
5547db96d56Sopenharmony_ci   scope.
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci   .. versionadded:: 3.2
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ci.. _debugger-aliases:
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci.. pdbcommand:: alias [name [command]]
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci   Create an alias called *name* that executes *command*.  The *command* must
5637db96d56Sopenharmony_ci   *not* be enclosed in quotes.  Replaceable parameters can be indicated by
5647db96d56Sopenharmony_ci   ``%1``, ``%2``, and so on, while ``%*`` is replaced by all the parameters.
5657db96d56Sopenharmony_ci   If *command* is omitted, the current alias for *name* is shown. If no
5667db96d56Sopenharmony_ci   arguments are given, all aliases are listed.
5677db96d56Sopenharmony_ci
5687db96d56Sopenharmony_ci   Aliases may be nested and can contain anything that can be legally typed at
5697db96d56Sopenharmony_ci   the pdb prompt.  Note that internal pdb commands *can* be overridden by
5707db96d56Sopenharmony_ci   aliases.  Such a command is then hidden until the alias is removed.  Aliasing
5717db96d56Sopenharmony_ci   is recursively applied to the first word of the command line; all other words
5727db96d56Sopenharmony_ci   in the line are left alone.
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci   As an example, here are two useful aliases (especially when placed in the
5757db96d56Sopenharmony_ci   :file:`.pdbrc` file)::
5767db96d56Sopenharmony_ci
5777db96d56Sopenharmony_ci      # Print instance variables (usage "pi classInst")
5787db96d56Sopenharmony_ci      alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")
5797db96d56Sopenharmony_ci      # Print instance variables in self
5807db96d56Sopenharmony_ci      alias ps pi self
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ci.. pdbcommand:: unalias name
5837db96d56Sopenharmony_ci
5847db96d56Sopenharmony_ci   Delete the specified alias *name*.
5857db96d56Sopenharmony_ci
5867db96d56Sopenharmony_ci.. pdbcommand:: ! statement
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci   Execute the (one-line) *statement* in the context of the current stack frame.
5897db96d56Sopenharmony_ci   The exclamation point can be omitted unless the first word of the statement
5907db96d56Sopenharmony_ci   resembles a debugger command.  To set a global variable, you can prefix the
5917db96d56Sopenharmony_ci   assignment command with a :keyword:`global` statement on the same line,
5927db96d56Sopenharmony_ci   e.g.::
5937db96d56Sopenharmony_ci
5947db96d56Sopenharmony_ci      (Pdb) global list_options; list_options = ['-l']
5957db96d56Sopenharmony_ci      (Pdb)
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ci.. pdbcommand:: run [args ...]
5987db96d56Sopenharmony_ci                restart [args ...]
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci   Restart the debugged Python program.  If *args* is supplied, it is split
6017db96d56Sopenharmony_ci   with :mod:`shlex` and the result is used as the new :data:`sys.argv`.
6027db96d56Sopenharmony_ci   History, breakpoints, actions and debugger options are preserved.
6037db96d56Sopenharmony_ci   :pdbcmd:`restart` is an alias for :pdbcmd:`run`.
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci.. pdbcommand:: q(uit)
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci   Quit from the debugger.  The program being executed is aborted.
6087db96d56Sopenharmony_ci
6097db96d56Sopenharmony_ci.. pdbcommand:: debug code
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_ci   Enter a recursive debugger that steps through *code*
6127db96d56Sopenharmony_ci   (which is an arbitrary expression or statement to be
6137db96d56Sopenharmony_ci   executed in the current environment).
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci.. pdbcommand:: retval
6167db96d56Sopenharmony_ci
6177db96d56Sopenharmony_ci   Print the return value for the last return of the current function.
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ci.. rubric:: Footnotes
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ci.. [1] Whether a frame is considered to originate in a certain module
6227db96d56Sopenharmony_ci       is determined by the ``__name__`` in the frame globals.
623