mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
DTrace support: function calls, GC activity, line execution
Tested on macOS 10.11 dtrace, Ubuntu 16.04 SystemTap, and libbcc. Largely based by an initial patch by Jesús Cea Avión, with some influence from Dave Malcolm's SystemTap patch and Nikhil Benesch's unification patch. Things deliberately left out for simplicity: - ustack helpers, I have no way of testing them at this point since they are Solaris-specific - PyFrameObject * in function__entry/function__return, this is SystemTap-specific - SPARC support - dynamic tracing - sys module dtrace facility introspection All of those might be added later.
This commit is contained in:
parent
39b42ae8db
commit
a785c87d6e
31 changed files with 1305 additions and 18 deletions
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "Python.h"
|
||||
#include "frameobject.h" /* for PyFrame_ClearFreeList */
|
||||
#include "pydtrace.h"
|
||||
#include "pytime.h" /* for _PyTime_GetMonotonicClock() */
|
||||
|
||||
/* Get an object's GC head */
|
||||
|
@ -925,6 +926,9 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable,
|
|||
PySys_WriteStderr("\n");
|
||||
}
|
||||
|
||||
if (PyDTrace_GC_START_ENABLED())
|
||||
PyDTrace_GC_START(generation);
|
||||
|
||||
/* update collection and allocation counters */
|
||||
if (generation+1 < NUM_GENERATIONS)
|
||||
generations[generation+1].count += 1;
|
||||
|
@ -1069,6 +1073,10 @@ collect(int generation, Py_ssize_t *n_collected, Py_ssize_t *n_uncollectable,
|
|||
stats->collections++;
|
||||
stats->collected += m;
|
||||
stats->uncollectable += n;
|
||||
|
||||
if (PyDTrace_GC_DONE_ENABLED())
|
||||
PyDTrace_GC_DONE(n+m);
|
||||
|
||||
return n+m;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue