[Python-Dev] Unifying trace and profile (original) (raw)

Robert Brewer fumanchu at amor.org
Wed Feb 22 01:48:46 CET 2006


There are a number of features I'd like to see happen with Python's tracing and profiling subsystems (but I don't have the C experience to do it myself). I started to write an SF feature-request and then realized it was too much for a single ticket. Maybe a PEP? All of these would be make my latest side project[1] a lot easier.

Anyway, here they are (most important and easiest-to-implement first):

  1. Allow trace hooks to receive c_call, c_return, and c_exception events (like profile does).

  2. Allow profile hooks to receive line events (like trace does).

  3. Expose new sys.gettrace() and getprofile() methods, so trace and profile functions that want to play nice can call sys.settrace/setprofile(None) only if they are the current hook.

  4. Make "the same move" that sys.exitfunc -> atexit made (from a single function to multiple functions via registration), so multiple tracers/profilers can play nice together.

  5. Allow the core to filter on the "event" arg before hook(frame, event, arg) is called.

  6. Unify tracing and profiling, which would remove a lot of redundant code in ceval and sysmodule and free up some space in the PyThreadState struct to boot.

  7. As if the above isn't enough of a dream, it would be nice to have a bytecode tracer, which didn't bother with the f_lineno logic in maybe_call_line_trace, but just called the hook on every instruction.

Robert Brewer System Architect Amor Ministries fumanchu at amor.org

[1] PyConquer, a trace hook to help understand and debug concurrent (threaded) code. http://projects.amor.org/misc/wiki/PyConquer



More information about the Python-Dev mailing list