From 546e34b654b03333cee0ba968c9f856a9b0b28d1 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Thu, 26 Jun 2003 14:56:17 +0000 Subject: [PATCH] Enable tracing of multi-threaded applications. Fix bug in computation of coverage percentage: Only count a line if it was executed or if we print the >>>>>> marker. --- Lib/trace.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Lib/trace.py b/Lib/trace.py index 9575911136d..89f31629794 100644 --- a/Lib/trace.py +++ b/Lib/trace.py @@ -50,6 +50,7 @@ import marshal import os import re import sys +import threading import token import tokenize import types @@ -317,9 +318,9 @@ class CoverageResults: # #pragma: NO COVER if lineno in lnotab and not PRAGMA_NOCOVER in lines[i]: outfile.write(">>>>>> ") + n_lines += 1 else: outfile.write(" ") - n_lines += 1 outfile.write(lines[i].expandtabs(8)) outfile.close() @@ -437,22 +438,26 @@ class Trace: dict = __main__.__dict__ if not self.donothing: sys.settrace(self.globaltrace) + threading.settrace(self.globaltrace) try: exec cmd in dict, dict finally: if not self.donothing: sys.settrace(None) + threading.settrace(None) def runctx(self, cmd, globals=None, locals=None): if globals is None: globals = {} if locals is None: locals = {} if not self.donothing: sys.settrace(self.globaltrace) + threading.settrace(self.globaltrace) try: exec cmd in globals, locals finally: if not self.donothing: sys.settrace(None) + threading.settrace(None) def runfunc(self, func, *args, **kw): result = None