See https://functiontrace.com/ for end user instructions and demos.
Functiontrace is implemented as two components:
- A server, written in Rust, which aggregates trace information from running processes
- A python module, written in Rust and Python (with some legacy C), which hooks in to the various traced events.
Development Info
Developing with Nix
With Nix, we use devenv to have a standard test and development environment.
The standard development loop is to setup that environment using devenv shell.
You can test small changes inside an existing devenv shell, including working
with most of our supported Python variants. To rebuild the Python module, you
need to tell Nix to rebuild by restarting your devenv shell.
Note: If you've made changes to the Rust code, you likely need to pass
--refresh-eval-cache since devenv doesn't seem to detect this case.
Developing with standard Python
Building the server
$ just build-server
Building the python module
$ uv build
$ python setup.py bdist_wheel --dist-dir ./dist
# You may also want to install it
$ uv pip install py-functiontrace/dist/*.whl
Testing
You must have functiontrace installed, and have functiontrace-server in
your $PATH. The Nix development path should do this for you.
# The test script will use the server built in target/release
$ just test