diff options
Diffstat (limited to 'coverage')
-rw-r--r-- | coverage/collector.py | 6 | ||||
-rw-r--r-- | coverage/misc.py | 6 |
2 files changed, 10 insertions, 2 deletions
diff --git a/coverage/collector.py b/coverage/collector.py index 1b807b27..bf465939 100644 --- a/coverage/collector.py +++ b/coverage/collector.py @@ -2,6 +2,8 @@ import os, sys, threading +from coverage.misc import short_stack + try: # Use the C extension code when we can, for speed. from coverage.tracer import CTracer # pylint: disable=F0401,E0611 @@ -124,8 +126,8 @@ class PyTracer(object): """Stop this Tracer.""" if hasattr(sys, "gettrace") and self.warn: if sys.gettrace() != self._trace: - msg = "Trace function changed, measurement is likely wrong: %r" - self.warn(msg % sys.gettrace()) + msg = "Trace function changed, measurement is likely wrong: %r\n%s" + self.warn(msg % (sys.gettrace(), short_stack())) sys.settrace(None) def get_stats(self): diff --git a/coverage/misc.py b/coverage/misc.py index 3ed854a7..b4d1c833 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -54,6 +54,12 @@ def format_lines(statements, lines): return ret +def short_stack(): + """Return a string summarizing the call stack.""" + stack = inspect.stack()[:0:-1] + return "\n".join("%30s : %s @%d" % (t[3],t[1],t[2]) for t in stack) + + def expensive(fn): """A decorator to cache the result of an expensive operation. |