4 ms·
Python has a built-in API for tracing: https://docs.python.org/3/library/sys.html#sys.settrace https://docs.python.org/3/library/sys.html#sys.settrace Here's a
by peterkelly 3y ago
Python has a built-in API for tracing: https://docs.python.org/3/library/sys.html#sys.settrace https://docs.python.org/3/library/sys.html#sys.settrace
Here's an example of how to use it (obviously a minimal case, you can customise your handler do do whatever you need):
def mytrace(frame, event, arg):
if event == "call":
print("call", frame.f_code.co_name, frame.f_locals)
elif event == "return":
print("return", frame.f_code.co_name, arg)
return mytrace
import sys
sys.settrace(mytrace)
For example, given the following code:
def three(z):
return 3
def two(y):
return three("BBB") - 1
def one():
return two("AAA") - 1
one()
It will output:
call one {}
call two {'y': 'AAA'}
call three {'z': 'BBB'}
return three 3
return two 2
return one 1
- taeric 3y agoI confess I'm surprised the builtin wasn't one of the demoed options. Curious what the reason is.
- isotopp 3y agoI just pushed an addendum, and it is being rendered right now.
- taeric 3y agoKudos on making the update! Makes sense that you might not find it if you didn't know it was there. Python's "batteries included" means most things you may want to do, you should check to see if there is a standard lib option, as well. Sometimes it is barebones enough that you may want more, of course. So, really nice to see all of the options you presented.
- yi_xuan 3y agoPdb also employs this approach for debug. I had wondered about pdb's implementation, when I saw it, I felt a little surprised.
- RJIb8RBYxzAMX9u 3y agoWow, I can't believe I didn't know about this until now! I'm the lucky 10k[0] today. [0] https://xkcd.com/1053/ https://xkcd.com/1053/