A python tracer
Project description
Panopticon
Panopticon is a debugger-powered tracer for Python code to quickly visualize and explore code execution. Traces generated are Catapult compatible — available at `chrome://tracing` if you're using Chrome.
Motivation & Internals
Python already has an excellent tracer module, but I wanted a more convenient way to observe what's actually going on across threads and coroutines. I'd used Catapult in a past life while working on Android, and that seemed like an excellent way to quickly get detailed visualizations of code execution that I could parse.
The current version is fairly simple, and relies on Python's setprofile to observe function transitions. Coroutines and other "continuable" frames are identified by their location in memory, and "closed" when they end with a RETURN_VALUE opcode.
Usage
Run a command directly
python3 -m panopticon -c "print('hello')" -o print_hello.trace
Run a file
python3 -m panopticon -o file.trace file.py
In code
with panopticon.tracer.AsyncTracer() as at:
print("Hello")
with open("print_hello.trace", "w") as outfile:
outfile.write(str(at))
Asynchronous Functions
Python supports suspending and continuing execution of a frame through generators, coroutines and asynchronous generators. Panopticon creates "flow" events to connect a single frame executing through time, making it easier to visualize what's actually happening.
You can enable/disable connections for different types of functions by choosing to enable/disable flow events in Catpult (top-right).
Changelog
0.0.1
- Initial version of Panopticon
- CLI supports running commands and files for tracing
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for panopticon-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 833d8adda9caf14834023e603748b690aabe081501348c44bfa8ef321ed43956 |
|
MD5 | c2fb88cd67c4542811d033c124ed7956 |
|
BLAKE2b-256 | 86de0d39a7d663c41530d20ee74236b925daff82c9de3b917893836d57c66be9 |