17db96d56Sopenharmony_ci:mod:`bdb` --- Debugger framework
27db96d56Sopenharmony_ci=================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: bdb
57db96d56Sopenharmony_ci   :synopsis: Debugger framework.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci**Source code:** :source:`Lib/bdb.py`
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci--------------
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciThe :mod:`bdb` module handles basic debugger functions, like setting breakpoints
127db96d56Sopenharmony_cior managing execution via the debugger.
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe following exception is defined:
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci.. exception:: BdbQuit
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci   Exception raised by the :class:`Bdb` class for quitting the debugger.
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ciThe :mod:`bdb` module also defines two classes:
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci.. class:: Breakpoint(self, file, line, temporary=False, cond=None, funcname=None)
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci   This class implements temporary breakpoints, ignore counts, disabling and
267db96d56Sopenharmony_ci   (re-)enabling, and conditionals.
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci   Breakpoints are indexed by number through a list called :attr:`bpbynumber`
297db96d56Sopenharmony_ci   and by ``(file, line)`` pairs through :attr:`bplist`.  The former points to
307db96d56Sopenharmony_ci   a single instance of class :class:`Breakpoint`.  The latter points to a list
317db96d56Sopenharmony_ci   of such instances since there may be more than one breakpoint per line.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci   When creating a breakpoint, its associated :attr:`file name <file>` should
347db96d56Sopenharmony_ci   be in canonical form.  If a :attr:`funcname` is defined, a breakpoint
357db96d56Sopenharmony_ci   :attr:`hit <hits>` will be counted when the first line of that function is
367db96d56Sopenharmony_ci   executed.  A :attr:`conditional <cond>` breakpoint always counts a
377db96d56Sopenharmony_ci   :attr:`hit <hits>`.
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci   :class:`Breakpoint` instances have the following methods:
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   .. method:: deleteMe()
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci      Delete the breakpoint from the list associated to a file/line.  If it is
447db96d56Sopenharmony_ci      the last breakpoint in that position, it also deletes the entry for the
457db96d56Sopenharmony_ci      file/line.
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   .. method:: enable()
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci      Mark the breakpoint as enabled.
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci   .. method:: disable()
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci      Mark the breakpoint as disabled.
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci   .. method:: bpformat()
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci      Return a string with all the information about the breakpoint, nicely
617db96d56Sopenharmony_ci      formatted:
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci      * Breakpoint number.
647db96d56Sopenharmony_ci      * Temporary status (del or keep).
657db96d56Sopenharmony_ci      * File/line position.
667db96d56Sopenharmony_ci      * Break condition.
677db96d56Sopenharmony_ci      * Number of times to ignore.
687db96d56Sopenharmony_ci      * Number of times hit.
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci      .. versionadded:: 3.2
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci   .. method:: bpprint(out=None)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci      Print the output of :meth:`bpformat` to the file *out*, or if it is
757db96d56Sopenharmony_ci      ``None``, to standard output.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   :class:`Breakpoint` instances have the following attributes:
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci   .. attribute:: file
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci      File name of the :class:`Breakpoint`.
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci   .. attribute:: line
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci      Line number of the :class:`Breakpoint` within :attr:`file`.
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci   .. attribute:: temporary
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci      True if a :class:`Breakpoint` at (file, line) is temporary.
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci   .. attribute:: cond
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci      Condition for evaluating a :class:`Breakpoint` at (file, line).
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci   .. attribute:: funcname
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci      Function name that defines whether a :class:`Breakpoint` is hit upon
987db96d56Sopenharmony_ci      entering the function.
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   .. attribute:: enabled
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci      True if :class:`Breakpoint` is enabled.
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   .. attribute:: bpbynumber
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci      Numeric index for a single instance of a :class:`Breakpoint`.
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci   .. attribute:: bplist
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci      Dictionary of :class:`Breakpoint` instances indexed by
1117db96d56Sopenharmony_ci      (:attr:`file`, :attr:`line`) tuples.
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci   .. attribute:: ignore
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci      Number of times to ignore a :class:`Breakpoint`.
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci   .. attribute:: hits
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci      Count of the number of times a :class:`Breakpoint` has been hit.
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci.. class:: Bdb(skip=None)
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci   The :class:`Bdb` class acts as a generic Python debugger base class.
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci   This class takes care of the details of the trace facility; a derived class
1267db96d56Sopenharmony_ci   should implement user interaction.  The standard debugger class
1277db96d56Sopenharmony_ci   (:class:`pdb.Pdb`) is an example.
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci   The *skip* argument, if given, must be an iterable of glob-style
1307db96d56Sopenharmony_ci   module name patterns.  The debugger will not step into frames that
1317db96d56Sopenharmony_ci   originate in a module that matches one of these patterns. Whether a
1327db96d56Sopenharmony_ci   frame is considered to originate in a certain module is determined
1337db96d56Sopenharmony_ci   by the ``__name__`` in the frame globals.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci   .. versionadded:: 3.1
1367db96d56Sopenharmony_ci      The *skip* argument.
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci   The following methods of :class:`Bdb` normally don't need to be overridden.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci   .. method:: canonic(filename)
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci      Return canonical form of *filename*.
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci      For real file names, the canonical form is an operating-system-dependent,
1457db96d56Sopenharmony_ci      :func:`case-normalized <os.path.normcase>` :func:`absolute path
1467db96d56Sopenharmony_ci      <os.path.abspath>`. A *filename* with angle brackets, such as ``"<stdin>"``
1477db96d56Sopenharmony_ci      generated in interactive mode, is returned unchanged.
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci   .. method:: reset()
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci      Set the :attr:`botframe`, :attr:`stopframe`, :attr:`returnframe` and
1527db96d56Sopenharmony_ci      :attr:`quitting` attributes with values ready to start debugging.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   .. method:: trace_dispatch(frame, event, arg)
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci      This function is installed as the trace function of debugged frames.  Its
1577db96d56Sopenharmony_ci      return value is the new trace function (in most cases, that is, itself).
1587db96d56Sopenharmony_ci
1597db96d56Sopenharmony_ci      The default implementation decides how to dispatch a frame, depending on
1607db96d56Sopenharmony_ci      the type of event (passed as a string) that is about to be executed.
1617db96d56Sopenharmony_ci      *event* can be one of the following:
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci      * ``"line"``: A new line of code is going to be executed.
1647db96d56Sopenharmony_ci      * ``"call"``: A function is about to be called, or another code block
1657db96d56Sopenharmony_ci        entered.
1667db96d56Sopenharmony_ci      * ``"return"``: A function or other code block is about to return.
1677db96d56Sopenharmony_ci      * ``"exception"``: An exception has occurred.
1687db96d56Sopenharmony_ci      * ``"c_call"``: A C function is about to be called.
1697db96d56Sopenharmony_ci      * ``"c_return"``: A C function has returned.
1707db96d56Sopenharmony_ci      * ``"c_exception"``: A C function has raised an exception.
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci      For the Python events, specialized functions (see below) are called.  For
1737db96d56Sopenharmony_ci      the C events, no action is taken.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci      The *arg* parameter depends on the previous event.
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci      See the documentation for :func:`sys.settrace` for more information on the
1787db96d56Sopenharmony_ci      trace function.  For more information on code and frame objects, refer to
1797db96d56Sopenharmony_ci      :ref:`types`.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   .. method:: dispatch_line(frame)
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci      If the debugger should stop on the current line, invoke the
1847db96d56Sopenharmony_ci      :meth:`user_line` method (which should be overridden in subclasses).
1857db96d56Sopenharmony_ci      Raise a :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set
1867db96d56Sopenharmony_ci      (which can be set from :meth:`user_line`).  Return a reference to the
1877db96d56Sopenharmony_ci      :meth:`trace_dispatch` method for further tracing in that scope.
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci   .. method:: dispatch_call(frame, arg)
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci      If the debugger should stop on this function call, invoke the
1927db96d56Sopenharmony_ci      :meth:`user_call` method (which should be overridden in subclasses).
1937db96d56Sopenharmony_ci      Raise a :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set
1947db96d56Sopenharmony_ci      (which can be set from :meth:`user_call`).  Return a reference to the
1957db96d56Sopenharmony_ci      :meth:`trace_dispatch` method for further tracing in that scope.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci   .. method:: dispatch_return(frame, arg)
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci      If the debugger should stop on this function return, invoke the
2007db96d56Sopenharmony_ci      :meth:`user_return` method (which should be overridden in subclasses).
2017db96d56Sopenharmony_ci      Raise a :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set
2027db96d56Sopenharmony_ci      (which can be set from :meth:`user_return`).  Return a reference to the
2037db96d56Sopenharmony_ci      :meth:`trace_dispatch` method for further tracing in that scope.
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci   .. method:: dispatch_exception(frame, arg)
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci      If the debugger should stop at this exception, invokes the
2087db96d56Sopenharmony_ci      :meth:`user_exception` method (which should be overridden in subclasses).
2097db96d56Sopenharmony_ci      Raise a :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set
2107db96d56Sopenharmony_ci      (which can be set from :meth:`user_exception`).  Return a reference to the
2117db96d56Sopenharmony_ci      :meth:`trace_dispatch` method for further tracing in that scope.
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci   Normally derived classes don't override the following methods, but they may
2147db96d56Sopenharmony_ci   if they want to redefine the definition of stopping and breakpoints.
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci   .. method:: is_skipped_line(module_name)
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci      Return True if *module_name* matches any skip pattern.
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci   .. method:: stop_here(frame)
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci      Return True if *frame* is below the starting frame in the stack.
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci   .. method:: break_here(frame)
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci      Return True if there is an effective breakpoint for this line.
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci      Check whether a line or function breakpoint exists and is in effect.  Delete temporary
2297db96d56Sopenharmony_ci      breakpoints based on information from :func:`effective`.
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci   .. method:: break_anywhere(frame)
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci      Return True if any breakpoint exists for *frame*'s filename.
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci   Derived classes should override these methods to gain control over debugger
2367db96d56Sopenharmony_ci   operation.
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci   .. method:: user_call(frame, argument_list)
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci      Called from :meth:`dispatch_call` if a break might stop inside the
2417db96d56Sopenharmony_ci      called function.
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci   .. method:: user_line(frame)
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci      Called from :meth:`dispatch_line` when either :meth:`stop_here` or
2467db96d56Sopenharmony_ci      :meth:`break_here` returns ``True``.
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   .. method:: user_return(frame, return_value)
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci      Called from :meth:`dispatch_return` when :meth:`stop_here` returns ``True``.
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci   .. method:: user_exception(frame, exc_info)
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci      Called from :meth:`dispatch_exception` when :meth:`stop_here`
2557db96d56Sopenharmony_ci      returns ``True``.
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci   .. method:: do_clear(arg)
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci      Handle how a breakpoint must be removed when it is a temporary one.
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci      This method must be implemented by derived classes.
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci   Derived classes and clients can call the following methods to affect the
2657db96d56Sopenharmony_ci   stepping state.
2667db96d56Sopenharmony_ci
2677db96d56Sopenharmony_ci   .. method:: set_step()
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ci      Stop after one line of code.
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci   .. method:: set_next(frame)
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci      Stop on the next line in or below the given frame.
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci   .. method:: set_return(frame)
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci      Stop when returning from the given frame.
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   .. method:: set_until(frame, lineno=None)
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci      Stop when the line with the *lineno* greater than the current one is
2827db96d56Sopenharmony_ci      reached or when returning from current frame.
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci   .. method:: set_trace([frame])
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ci      Start debugging from *frame*.  If *frame* is not specified, debugging
2877db96d56Sopenharmony_ci      starts from caller's frame.
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci   .. method:: set_continue()
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci      Stop only at breakpoints or when finished.  If there are no breakpoints,
2927db96d56Sopenharmony_ci      set the system trace function to ``None``.
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci   .. method:: set_quit()
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci      Set the :attr:`quitting` attribute to ``True``.  This raises :exc:`BdbQuit` in
2977db96d56Sopenharmony_ci      the next call to one of the :meth:`dispatch_\*` methods.
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci   Derived classes and clients can call the following methods to manipulate
3017db96d56Sopenharmony_ci   breakpoints.  These methods return a string containing an error message if
3027db96d56Sopenharmony_ci   something went wrong, or ``None`` if all is well.
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci   .. method:: set_break(filename, lineno, temporary=False, cond=None, funcname=None)
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci      Set a new breakpoint.  If the *lineno* line doesn't exist for the
3077db96d56Sopenharmony_ci      *filename* passed as argument, return an error message.  The *filename*
3087db96d56Sopenharmony_ci      should be in canonical form, as described in the :meth:`canonic` method.
3097db96d56Sopenharmony_ci
3107db96d56Sopenharmony_ci   .. method:: clear_break(filename, lineno)
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci      Delete the breakpoints in *filename* and *lineno*.  If none were set,
3137db96d56Sopenharmony_ci      return an error message.
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci   .. method:: clear_bpbynumber(arg)
3167db96d56Sopenharmony_ci
3177db96d56Sopenharmony_ci      Delete the breakpoint which has the index *arg* in the
3187db96d56Sopenharmony_ci      :attr:`Breakpoint.bpbynumber`.  If *arg* is not numeric or out of range,
3197db96d56Sopenharmony_ci      return an error message.
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci   .. method:: clear_all_file_breaks(filename)
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci      Delete all breakpoints in *filename*.  If none were set, return an error
3247db96d56Sopenharmony_ci      message.
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci   .. method:: clear_all_breaks()
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci      Delete all existing breakpoints.  If none were set, return an error
3297db96d56Sopenharmony_ci      message.
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci   .. method:: get_bpbynumber(arg)
3327db96d56Sopenharmony_ci
3337db96d56Sopenharmony_ci      Return a breakpoint specified by the given number.  If *arg* is a string,
3347db96d56Sopenharmony_ci      it will be converted to a number.  If *arg* is a non-numeric string, if
3357db96d56Sopenharmony_ci      the given breakpoint never existed or has been deleted, a
3367db96d56Sopenharmony_ci      :exc:`ValueError` is raised.
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci      .. versionadded:: 3.2
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci   .. method:: get_break(filename, lineno)
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci      Return True if there is a breakpoint for *lineno* in *filename*.
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_ci   .. method:: get_breaks(filename, lineno)
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci      Return all breakpoints for *lineno* in *filename*, or an empty list if
3477db96d56Sopenharmony_ci      none are set.
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci   .. method:: get_file_breaks(filename)
3507db96d56Sopenharmony_ci
3517db96d56Sopenharmony_ci      Return all breakpoints in *filename*, or an empty list if none are set.
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci   .. method:: get_all_breaks()
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci      Return all breakpoints that are set.
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci   Derived classes and clients can call the following methods to get a data
3597db96d56Sopenharmony_ci   structure representing a stack trace.
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci   .. method:: get_stack(f, t)
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci      Return a list of (frame, lineno) tuples in a stack trace, and a size.
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci      The most recently called frame is last in the list. The size is the number
3667db96d56Sopenharmony_ci      of frames below the frame where the debugger was invoked.
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci   .. method:: format_stack_entry(frame_lineno, lprefix=': ')
3697db96d56Sopenharmony_ci
3707db96d56Sopenharmony_ci      Return a string with information about a stack entry, which is a
3717db96d56Sopenharmony_ci      ``(frame, lineno)`` tuple.  The return string contains:
3727db96d56Sopenharmony_ci
3737db96d56Sopenharmony_ci      * The canonical filename which contains the frame.
3747db96d56Sopenharmony_ci      * The function name or ``"<lambda>"``.
3757db96d56Sopenharmony_ci      * The input arguments.
3767db96d56Sopenharmony_ci      * The return value.
3777db96d56Sopenharmony_ci      * The line of code (if it exists).
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   The following two methods can be called by clients to use a debugger to debug
3817db96d56Sopenharmony_ci   a :term:`statement`, given as a string.
3827db96d56Sopenharmony_ci
3837db96d56Sopenharmony_ci   .. method:: run(cmd, globals=None, locals=None)
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci      Debug a statement executed via the :func:`exec` function.  *globals*
3867db96d56Sopenharmony_ci      defaults to :attr:`__main__.__dict__`, *locals* defaults to *globals*.
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci   .. method:: runeval(expr, globals=None, locals=None)
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci      Debug an expression executed via the :func:`eval` function.  *globals* and
3917db96d56Sopenharmony_ci      *locals* have the same meaning as in :meth:`run`.
3927db96d56Sopenharmony_ci
3937db96d56Sopenharmony_ci   .. method:: runctx(cmd, globals, locals)
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci      For backwards compatibility.  Calls the :meth:`run` method.
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci   .. method:: runcall(func, /, *args, **kwds)
3987db96d56Sopenharmony_ci
3997db96d56Sopenharmony_ci      Debug a single function call, and return its result.
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ciFinally, the module defines the following functions:
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ci.. function:: checkfuncname(b, frame)
4057db96d56Sopenharmony_ci
4067db96d56Sopenharmony_ci   Return True if we should break here, depending on the way the
4077db96d56Sopenharmony_ci   :class:`Breakpoint` *b* was set.
4087db96d56Sopenharmony_ci
4097db96d56Sopenharmony_ci   If it was set via line number, it checks if
4107db96d56Sopenharmony_ci   :attr:`b.line <bdb.Breakpoint.line>` is the same as the one in *frame*.
4117db96d56Sopenharmony_ci   If the breakpoint was set via
4127db96d56Sopenharmony_ci   :attr:`function name <bdb.Breakpoint.funcname>`, we have to check we are in
4137db96d56Sopenharmony_ci   the right *frame* (the right function) and if we are on its first executable
4147db96d56Sopenharmony_ci   line.
4157db96d56Sopenharmony_ci
4167db96d56Sopenharmony_ci.. function:: effective(file, line, frame)
4177db96d56Sopenharmony_ci
4187db96d56Sopenharmony_ci   Return ``(active breakpoint, delete temporary flag)`` or ``(None, None)`` as the
4197db96d56Sopenharmony_ci   breakpoint to act upon.
4207db96d56Sopenharmony_ci
4217db96d56Sopenharmony_ci   The *active breakpoint* is the first entry in
4227db96d56Sopenharmony_ci   :attr:`bplist <bdb.Breakpoint.bplist>` for the
4237db96d56Sopenharmony_ci   (:attr:`file <bdb.Breakpoint.file>`, :attr:`line <bdb.Breakpoint.line>`)
4247db96d56Sopenharmony_ci   (which must exist) that is :attr:`enabled <bdb.Breakpoint.enabled>`, for
4257db96d56Sopenharmony_ci   which :func:`checkfuncname` is True, and that has neither a False
4267db96d56Sopenharmony_ci   :attr:`condition <bdb.Breakpoint.cond>` nor positive
4277db96d56Sopenharmony_ci   :attr:`ignore <bdb.Breakpoint.ignore>` count.  The *flag*, meaning that a
4287db96d56Sopenharmony_ci   temporary breakpoint should be deleted, is False only when the
4297db96d56Sopenharmony_ci   :attr:`cond <bdb.Breakpoint.cond>` cannot be evaluated (in which case,
4307db96d56Sopenharmony_ci   :attr:`ignore <bdb.Breakpoint.ignore>` count is ignored).
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci   If no such entry exists, then (None, None) is returned.
4337db96d56Sopenharmony_ci
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci.. function:: set_trace()
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci   Start debugging with a :class:`Bdb` instance from caller's frame.
438