diff options
Diffstat (limited to 'Doc/library/trace.rst')
-rw-r--r-- | Doc/library/trace.rst | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/Doc/library/trace.rst b/Doc/library/trace.rst new file mode 100644 index 0000000..91cf1a4 --- /dev/null +++ b/Doc/library/trace.rst @@ -0,0 +1,128 @@ + +:mod:`trace` --- Trace or track Python statement execution +========================================================== + +.. module:: trace + :synopsis: Trace or track Python statement execution. + + +The :mod:`trace` module allows you to trace program execution, generate +annotated statement coverage listings, print caller/callee relationships and +list functions executed during a program run. It can be used in another program +or from the command line. + + +.. _trace-cli: + +Command Line Usage +------------------ + +The :mod:`trace` module can be invoked from the command line. It can be as +simple as :: + + python -m trace --count somefile.py ... + +The above will generate annotated listings of all Python modules imported during +the execution of :file:`somefile.py`. + +The following command-line arguments are supported: + +:option:`--trace`, :option:`-t` + Display lines as they are executed. + +:option:`--count`, :option:`-c` + Produce a set of annotated listing files upon program completion that shows how + many times each statement was executed. + +:option:`--report`, :option:`-r` + Produce an annotated list from an earlier program run that used the + :option:`--count` and :option:`--file` arguments. + +:option:`--no-report`, :option:`-R` + Do not generate annotated listings. This is useful if you intend to make + several runs with :option:`--count` then produce a single set of annotated + listings at the end. + +:option:`--listfuncs`, :option:`-l` + List the functions executed by running the program. + +:option:`--trackcalls`, :option:`-T` + Generate calling relationships exposed by running the program. + +:option:`--file`, :option:`-f` + Name a file containing (or to contain) counts. + +:option:`--coverdir`, :option:`-C` + Name a directory in which to save annotated listing files. + +:option:`--missing`, :option:`-m` + When generating annotated listings, mark lines which were not executed with + '``>>>>>>``'. + +:option:`--summary`, :option:`-s` + When using :option:`--count` or :option:`--report`, write a brief summary to + stdout for each file processed. + +:option:`--ignore-module` + Ignore the named module and its submodules (if it is a package). May be given + multiple times. + +:option:`--ignore-dir` + Ignore all modules and packages in the named directory and subdirectories. May + be given multiple times. + + +.. _trace-api: + +Programming Interface +--------------------- + + +.. class:: Trace([count=1[, trace=1[, countfuncs=0[, countcallers=0[, ignoremods=()[, ignoredirs=()[, infile=None[, outfile=None]]]]]]]]) + + Create an object to trace execution of a single statement or expression. All + parameters are optional. *count* enables counting of line numbers. *trace* + enables line execution tracing. *countfuncs* enables listing of the functions + called during the run. *countcallers* enables call relationship tracking. + *ignoremods* is a list of modules or packages to ignore. *ignoredirs* is a list + of directories whose modules or packages should be ignored. *infile* is the + file from which to read stored count information. *outfile* is a file in which + to write updated count information. + + +.. method:: Trace.run(cmd) + + Run *cmd* under control of the Trace object with the current tracing parameters. + + +.. method:: Trace.runctx(cmd[, globals=None[, locals=None]]) + + Run *cmd* under control of the Trace object with the current tracing parameters + in the defined global and local environments. If not defined, *globals* and + *locals* default to empty dictionaries. + + +.. method:: Trace.runfunc(func, *args, **kwds) + + Call *func* with the given arguments under control of the :class:`Trace` object + with the current tracing parameters. + +This is a simple example showing the use of this module:: + + import sys + import trace + + # create a Trace object, telling it what to ignore, and whether to + # do tracing or line-counting or both. + tracer = trace.Trace( + ignoredirs=[sys.prefix, sys.exec_prefix], + trace=0, + count=1) + + # run the new command using the given tracer + tracer.run('main()') + + # make a report, placing output in /tmp + r = tracer.results() + r.write_results(show_missing=True, coverdir="/tmp") + |