tracefunc
tracefunc takes a function and its arguments, executes it, and returns
a TraceResults list of per-call traces. Each entry is
(stack_str, trace_dict) where stack_str is the call stack (filtered
so fn is the shallowest frame shown; empty when target_func is
None) and trace_dict maps AST-level snippets to
(hit_count, vars_map) with per-hit samples. Comprehensions show up as
their own lines with per-iteration values. Lines that never executed are
omitted unless incl_unhit=True, and if the function raises, the
exception lands in the result’s exc attribute with the traces gathered
up to the raise still returned.
Install
pip install tracefunc
Requires Python 3.12+ (uses sys.monitoring instruction events).
How to use
from tracefunc import tracefunc
from pprint import pprint
Simple function
Here’s a simple example tracing a loop:
def demo(n):
total = 0
for i in range(n): total += i
return total
def show_res(x):
for snippet, (hits, vars_map) in x.items():
print('-', repr(snippet), hits)
pprint(vars_map)
stack, result = tracefunc(demo, 3, target_func=demo)[0]
print(stack)
show_res(result)
demo (2643322203.py:1)
- 'total = 0' 1
{'total': [('int', '0')]}
- 'for i in range(n):' 4
{'i': [('int', '0'), ('int', '1'), ('int', '2'), ('int', '2')],
'n': [('int', '3'), ('int', '3'), ('int', '3'), ('int', '3')],
'range': [('type', "<class 'range'>"),
('type', "<class 'range'>"),
('type', "<class 'range'>"),
('type', "<class 'range'>")]}
- 'total += i' 3
{'i': [('int', '0'), ('int', '1'), ('int', '2')],
'total': [('int', '0'), ('int', '1'), ('int', '3')]}
- 'return total' 1
{'total': [('int', '3')]}
Multiple statements on one physical line
Semicolon-separated statements are tracked separately.
def one_liner(): x = 1; y = 2; return x + y
_, res = tracefunc(one_liner)[0]
show_res(res)
- 'x = 1' 1
{'x': [('int', '1')]}
- 'y = 2' 1
{'y': [('int', '2')]}
- 'return x + y' 1
{'x': [('int', '1')], 'y': [('int', '2')]}
Targeted tracing and call stacks
You can trace a specific target function and see the call stack for each
call. Stack paths are shown relative to fn’s directory when possible.
def target(x):
return x + 1
def another(x): return target(x)
def wrapper(n):
out = []
for i in range(n): out.append(target(i))
out.append(another(10))
return out
for stack, res in tracefunc(wrapper, 2, target_func=target):
print(stack)
show_res(res)
wrapper (1041865549.py:8)
target (1041865549.py:1)
- 'return x + 1' 1
{'x': [('int', '0')]}
wrapper (1041865549.py:8)
target (1041865549.py:1)
- 'return x + 1' 1
{'x': [('int', '1')]}
wrapper (1041865549.py:9)
another (1041865549.py:4)
target (1041865549.py:1)
- 'return x + 1' 1
{'x': [('int', '10')]}
Nested function
Nested definitions appear as statements, and their bodies are traced when called.
def outer(x):
def inner(y):
return x + y
return inner(5)
_, res = tracefunc(outer, 10)[0]
show_res(res)
- 'def inner(y):' 1
{'inner': [('function', '<function outer.<locals>.inner>')]}
- 'return x + y' 1
{'x': [('int', '10')], 'y': [('int', '5')]}
- 'return inner(5)' 1
{'inner': [('function', '<function outer.<locals>.inner>')]}
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tracefunc-0.0.7.tar.gz.
File metadata
- Download URL: tracefunc-0.0.7.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e22dd04289a402ad1ff198d340b27ee42b8b63aec9a8fadc08025912bd4c006c
|
|
| MD5 |
3063bd34803267f5b99176d40f03d232
|
|
| BLAKE2b-256 |
cd06eed06b426935e0beb96ed59e994a10abe3e9489e8508054d2c492be56a37
|
File details
Details for the file tracefunc-0.0.7-py3-none-any.whl.
File metadata
- Download URL: tracefunc-0.0.7-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bece00dc1b58336065b5b75872d151b97e89c85f80e20af341fec49a7c63d5bd
|
|
| MD5 |
3c8e306329a19f4a8964b7bc626767a0
|
|
| BLAKE2b-256 |
d0714eb11e956bea3598e0215165834cbf3897f92fc16b5be667bab79f65a659
|