summaryrefslogtreecommitdiff
path: root/coverage/debug.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-08-19 22:47:37 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-08-19 22:47:37 -0400
commite3bb087bfe10cce8ca4b260484740b0a3ffc5673 (patch)
treed6f5a78bed9b85e9f534c6a12c4bb0b2532e9f6a /coverage/debug.py
parent17baa78a34fcb5c3a877ede34378ff0570af531d (diff)
downloadpython-coveragepy-e3bb087bfe10cce8ca4b260484740b0a3ffc5673.tar.gz
Added more debugging controls, especially for data operations
Diffstat (limited to 'coverage/debug.py')
-rw-r--r--coverage/debug.py15
1 files changed, 9 insertions, 6 deletions
diff --git a/coverage/debug.py b/coverage/debug.py
index 8d36c1c..8ae087d 100644
--- a/coverage/debug.py
+++ b/coverage/debug.py
@@ -7,6 +7,7 @@ import inspect
import json
import os
import re
+import sys
# When debugging, it can be helpful to force some options, especially when
@@ -27,9 +28,7 @@ class DebugControl(object):
self.output = output
def __repr__(self):
- return "<DebugControl options=%r output=%r>" % (
- self.options, self.output
- )
+ return "<DebugControl options=%r output=%r>" % (self.options, self.output)
def should(self, option):
"""Decide whether to output debug information in category `option`."""
@@ -40,6 +39,8 @@ class DebugControl(object):
if self.should('pid'):
msg = "pid %5d: %s" % (os.getpid(), msg)
self.output.write(msg+"\n")
+ if self.should('callers'):
+ dump_stack_frames(self.output)
self.output.flush()
def write_formatted_info(self, header, info):
@@ -94,9 +95,11 @@ def short_stack(): # pragma: debugging
return "\n".join("%30s : %s @%d" % (t[3], t[1], t[2]) for t in stack)
-def dump_stack_frames(): # pragma: debugging
- """Print a summary of the stack to stdout."""
- print(short_stack())
+def dump_stack_frames(out=None): # pragma: debugging
+ """Print a summary of the stack to stdout, or some place else."""
+ out = out or sys.stdout
+ out.write(short_stack())
+ out.write("\n")
def pretty_data(data):