From 694816ca8df338325a1e28f5d4564324ccb31a7a Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sat, 4 Apr 2009 22:33:39 -0400 Subject: Use a finally clause to ensure that coverage measurement is stopped no matter how the main program terminates. --- coverage/cmdline.py | 6 ++++-- coverage/tracer.c | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'coverage') diff --git a/coverage/cmdline.py b/coverage/cmdline.py index a6844467..df508cf8 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -129,8 +129,10 @@ class CoverageScript: # Run the script. self.coverage.start() - run_python_file(args[0], args) - self.coverage.stop() + try: + run_python_file(args[0], args) + finally: + self.coverage.stop() if settings.get('combine'): self.coverage.combine() diff --git a/coverage/tracer.c b/coverage/tracer.c index cd07ded2..d333eb65 100644 --- a/coverage/tracer.c +++ b/coverage/tracer.c @@ -6,6 +6,14 @@ #include "structmember.h" #include "frameobject.h" +#define DEBUG 1 + +#if DEBUG +#define IFDEBUG(x) x +#else +#define IFDEBUG(x) +#endif + // The Tracer type. typedef struct { @@ -18,6 +26,8 @@ typedef struct { int depth; // Filenames to record at each level, or NULL if not recording. PyObject * tracenames[300]; + + IFDEBUG(int nshould;) } Tracer; static int @@ -28,6 +38,7 @@ Tracer_init(Tracer *self, PyObject *args, PyObject *kwds) self->should_trace_cache = NULL; self->started = 0; self->depth = -1; + IFDEBUG(self->nshould = 0;) return 0; } @@ -70,6 +81,7 @@ Tracer_trace(Tracer *self, PyFrameObject *frame, int what, PyObject *arg) tracename = PyDict_GetItem(self->should_trace_cache, filename); if (tracename == NULL) { // We've never considered this file before. Ask should_trace about it. + IFDEBUG(self->nshould++;) PyObject * args = Py_BuildValue("(O)", filename); tracename = PyObject_Call(self->should_trace, args, NULL); Py_DECREF(args); @@ -128,6 +140,7 @@ Tracer_stop(Tracer *self, PyObject *args) PyEval_SetTrace(NULL, NULL); self->started = 0; } + IFDEBUG(printf("nshould=%d\n", self->nshould);) return Py_BuildValue(""); } -- cgit v1.2.1