summaryrefslogtreecommitdiff
path: root/Doc/library
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2017-10-05 12:11:18 -0400
committerGitHub <noreply@github.com>2017-10-05 12:11:18 -0400
commit36c1d1f1e52ba54007cbecb42c5599e5ff62aa52 (patch)
tree317c296450800bfb25851dd92a62050e26c4c4fd /Doc/library
parent4d071897880b7e84e1a217ebe19971c118316970 (diff)
downloadcpython-git-36c1d1f1e52ba54007cbecb42c5599e5ff62aa52.tar.gz
PEP 553 built-in breakpoint() function (bpo-31353) (#3355)
Implement PEP 553, built-in breakpoint() with support from sys.breakpointhook(), along with documentation and tests. Closes bpo-31353
Diffstat (limited to 'Doc/library')
-rw-r--r--Doc/library/functions.rst48
-rw-r--r--Doc/library/sys.rst47
2 files changed, 74 insertions, 21 deletions
diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst
index 015231d9cf..08093e61fe 100644
--- a/Doc/library/functions.rst
+++ b/Doc/library/functions.rst
@@ -7,24 +7,24 @@ Built-in Functions
The Python interpreter has a number of functions and types built into it that
are always available. They are listed here in alphabetical order.
-=================== ================= ================== ================ ====================
-.. .. Built-in Functions .. ..
-=================== ================= ================== ================ ====================
-:func:`abs` |func-dict|_ :func:`help` :func:`min` :func:`setattr`
-:func:`all` :func:`dir` :func:`hex` :func:`next` :func:`slice`
-:func:`any` :func:`divmod` :func:`id` :func:`object` :func:`sorted`
-:func:`ascii` :func:`enumerate` :func:`input` :func:`oct` :func:`staticmethod`
-:func:`bin` :func:`eval` :func:`int` :func:`open` |func-str|_
-:func:`bool` :func:`exec` :func:`isinstance` :func:`ord` :func:`sum`
-|func-bytearray|_ :func:`filter` :func:`issubclass` :func:`pow` :func:`super`
-|func-bytes|_ :func:`float` :func:`iter` :func:`print` |func-tuple|_
-:func:`callable` :func:`format` :func:`len` :func:`property` :func:`type`
-:func:`chr` |func-frozenset|_ |func-list|_ |func-range|_ :func:`vars`
-:func:`classmethod` :func:`getattr` :func:`locals` :func:`repr` :func:`zip`
-:func:`compile` :func:`globals` :func:`map` :func:`reversed` :func:`__import__`
+=================== ================= ================== ================== ====================
+.. .. Built-in Functions .. ..
+=================== ================= ================== ================== ====================
+:func:`abs` :func:`delattr` :func:`hash` |func-memoryview|_ |func-set|_
+:func:`all` |func-dict|_ :func:`help` :func:`min` :func:`setattr`
+:func:`any` :func:`dir` :func:`hex` :func:`next` :func:`slice`
+:func:`ascii` :func:`divmod` :func:`id` :func:`object` :func:`sorted`
+:func:`bin` :func:`enumerate` :func:`input` :func:`oct` :func:`staticmethod`
+:func:`bool` :func:`eval` :func:`int` :func:`open` |func-str|_
+:func:`breakpoint` :func:`exec` :func:`isinstance` :func:`ord` :func:`sum`
+|func-bytearray|_ :func:`filter` :func:`issubclass` :func:`pow` :func:`super`
+|func-bytes|_ :func:`float` :func:`iter` :func:`print` |func-tuple|_
+:func:`callable` :func:`format` :func:`len` :func:`property` :func:`type`
+:func:`chr` |func-frozenset|_ |func-list|_ |func-range|_ :func:`vars`
+:func:`classmethod` :func:`getattr` :func:`locals` :func:`repr` :func:`zip`
+:func:`compile` :func:`globals` :func:`map` :func:`reversed` :func:`__import__`
:func:`complex` :func:`hasattr` :func:`max` :func:`round`
-:func:`delattr` :func:`hash` |func-memoryview|_ |func-set|_
-=================== ================= ================== ================ ====================
+=================== ================= ================== ================== ====================
.. using :func:`dict` would create a link to another page, so local targets are
used, with replacement texts to make the output in the table consistent
@@ -113,6 +113,20 @@ are always available. They are listed here in alphabetical order.
.. index:: pair: Boolean; type
+.. function:: breakpoint(*args, **kws)
+
+ This function drops you into the debugger at the call site. Specifically,
+ it calls :func:`sys.breakpointhook`, passing ``args`` and ``kws`` straight
+ through. By default, ``sys.breakpointhook()`` calls
+ :func:`pdb.set_trace()` expecting no arguments. In this case, it is
+ purely a convenience function so you don't have to explicitly import
+ :mod:`pdb` or type as much code to enter the debugger. However,
+ :func:`sys.breakpointhook` can be set to some other function and
+ :func:`breakpoint` will automatically call that, allowing you to drop into
+ the debugger of choice.
+
+ .. versionadded:: 3.7
+
.. _func-bytearray:
.. class:: bytearray([source[, encoding[, errors]]])
:noindex:
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 85f31368c3..aa7bd477b0 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -109,6 +109,40 @@ always available.
This function should be used for internal and specialized purposes only.
+.. function:: breakpointhook()
+
+ This hook function is called by built-in :func:`breakpoint`. By default,
+ it drops you into the :mod:`pdb` debugger, but it can be set to any other
+ function so that you can choose which debugger gets used.
+
+ The signature of this function is dependent on what it calls. For example,
+ the default binding (e.g. ``pdb.set_trace()``) expects no arguments, but
+ you might bind it to a function that expects additional arguments
+ (positional and/or keyword). The built-in ``breakpoint()`` function passes
+ its ``*args`` and ``**kws`` straight through. Whatever
+ ``breakpointhooks()`` returns is returned from ``breakpoint()``.
+
+ The default implementation first consults the environment variable
+ :envvar:`PYTHONBREAKPOINT`. If that is set to ``"0"`` then this function
+ returns immediately; i.e. it is a no-op. If the environment variable is
+ not set, or is set to the empty string, ``pdb.set_trace()`` is called.
+ Otherwise this variable should name a function to run, using Python's
+ dotted-import nomenclature, e.g. ``package.subpackage.module.function``.
+ In this case, ``package.subpackage.module`` would be imported and the
+ resulting module must have a callable named ``function()``. This is run,
+ passing in ``*args`` and ``**kws``, and whatever ``function()`` returns,
+ ``sys.breakpointhook()`` returns to the built-in :func:`breakpoint`
+ function.
+
+ Note that if anything goes wrong while importing the callable named by
+ :envvar:`PYTHONBREAKPOINT`, a :exc:`RuntimeWarning` is reported and the
+ breakpoint is ignored.
+
+ Also note that if ``sys.breakpointhook()`` is overridden programmatically,
+ :envvar:`PYTHONBREAKPOINT` is *not* consulted.
+
+ .. versionadded:: 3.7
+
.. function:: _debugmallocstats()
Print low-level information to stderr about the state of CPython's memory
@@ -187,14 +221,19 @@ always available.
customized by assigning another three-argument function to ``sys.excepthook``.
-.. data:: __displayhook__
+.. data:: __breakpointhook__
+ __displayhook__
__excepthook__
- These objects contain the original values of ``displayhook`` and ``excepthook``
- at the start of the program. They are saved so that ``displayhook`` and
- ``excepthook`` can be restored in case they happen to get replaced with broken
+ These objects contain the original values of ``breakpointhook``,
+ ``displayhook``, and ``excepthook`` at the start of the program. They are
+ saved so that ``breakpointhook``, ``displayhook`` and ``excepthook`` can be
+ restored in case they happen to get replaced with broken or alternative
objects.
+ .. versionadded:: 3.7
+ __breakpointhook__
+
.. function:: exc_info()