|
|
|
Python/C API Reference Manual |
|
|
|
1.5 Debugging Builds
Python can be built with several macros to enable extra checks of the
interpreter and extension modules. These checks tend to add a large
amount of overhead to the runtime so they are not enabled by default.
A full list of the various types of debugging builds is in the file
Misc/SpecialBuilds.txt in the Python source distribution.
Builds are available that support tracing of reference counts,
debugging the memory allocator, or low-level profiling of the main
interpreter loop. Only the most frequently-used builds will be
described in the remainder of this section.
Compiling the interpreter with the Py_DEBUG macro
defined produces what is generally meant by "a debug build" of Python.
Py_DEBUG is enabled in the Unix build by adding
--with-pydebug to the configure command. It is also
implied by the presence of the not-Python-specific
_DEBUG macro. When Py_DEBUG is enabled
in the Unix build, compiler optimization is disabled.
In addition to the reference count debugging described below, the
following extra checks are performed:
- Extra checks are added to the object allocator.
- Extra checks are added to the parser and compiler.
- Downcasts from wide types to narrow types are checked for
loss of information.
- A number of assertions are added to the dictionary and set
implementations. In addition, the set object acquires a
test_c_api method.
- Sanity checks of the input arguments are added to frame
creation.
- The storage for long ints is initialized with a known
invalid pattern to catch reference to uninitialized
digits.
- Low-level tracing and extra exception checking are added
to the runtime virtual machine.
- Extra checks are added to the memory arena implementation.
- Extra debugging is added to the thread module.
There may be additional checks not mentioned here.
Defining Py_TRACE_REFS enables reference tracing. When
defined, a circular doubly linked list of active objects is maintained
by adding two extra fields to every PyObject. Total
allocations are tracked as well. Upon exit, all existing references
are printed. (In interactive mode this happens after every statement
run by the interpreter.) Implied by Py_DEBUG.
Please refer to Misc/SpecialBuilds.txt in the Python source
distribution for more detailed information.
Release 2.5.2, documentation updated on 21st February, 2008.
See About this document... for information on suggesting changes.
|