summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-04-04 22:33:39 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-04-04 22:33:39 -0400
commit694816ca8df338325a1e28f5d4564324ccb31a7a (patch)
treefd259c4a3b43914793ccf59e05af749fcfba6a54
parent8e10aa1d04b979e7a6b026c8be8d22f8689299ce (diff)
downloadpython-coveragepy-git-694816ca8df338325a1e28f5d4564324ccb31a7a.tar.gz
Use a finally clause to ensure that coverage measurement is stopped no matter how the main program terminates.
-rw-r--r--coverage/cmdline.py6
-rw-r--r--coverage/tracer.c13
2 files changed, 17 insertions, 2 deletions
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("");
}