pytrace records function calls, arguments and return values.
traces aid debugging, profiling and obviate logging.
Follow @alonhorev on twitter for updates.
pytrace depends on sqlite and a C implementation of protocol buffers.
on debian/ubuntu: sudo apt-get install libsqlite3-dev libprotobuf-c0-dev
on mac (sqlite is included): brew install protobuf-c
or port install protobuf-c
install pytrace:
pip install pytrace
Invoke pytrace with your script:
$ pytrace foo.py --bar
Invoke the reader from the same directory by executing pytrace with no arguments:
$ pytrace
The reader can be invoked while the script is running. providing 'online' debugging capabilities.
The collected data can be viewed in an interactive reader. The reader supports less-like key bindings.
The reader can search for regular expressions:
The reader can filter traces using a python syntax:
- strings support comparison using the sql 'like' syntax:
module == 'project.%'
. - numbers support numeric operators:
time > '2012/08/15 01:23:45'
.
The reader corrects queries that don't match anything:
The database is saved in the current working directory and is named traces.sqlite
.
In order to not run out of disk space, The database will be truncated to a fixed number of traces (currently hard coded to 10000).
Hot functions can be skipped using a decorator:
from pytrace import notrace
@notrace
def hot():
pass
Trace specific packages:
$ export TRACE_MODULES=/Users/alon/project
You can specify a colon :
separated list of folders as well.
- Extract to configuration:
- size of shared memory.
- db path.
- max traces.
- Add an option to ignore modules under site-packages.
- Explicit tracing (logging).
- Sort the arguments.
- Scroll horizontally.
- Ignore traces created by the library.
- Filter query autocompletion using tab/arrows.
- Print '...' on overflown strings.
- Document multiple process support. (one db, two processes)