diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2012-12-20 07:02:12 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2012-12-20 07:02:12 -0500 |
commit | 741e21203b77547906babf0f04edf7eb5dedf723 (patch) | |
tree | e6f2350497fad7c57d1aed9e4a47b7db105f0940 /coverage | |
parent | 3349880afb9409cc052066a8f7688ca5e305693e (diff) | |
download | python-coveragepy-git-741e21203b77547906babf0f04edf7eb5dedf723.tar.gz |
Debugging to understand why 'trace function changed' appears.
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. |