[pypy-svn] r4916 - in pypy/branch/src-newobjectmodel/pypy: interpreter tool/tb_server
mwh at codespeak.net
mwh at codespeak.net
Fri Jun 4 17:13:38 CEST 2004
Author: mwh
Date: Fri Jun 4 17:13:37 2004
New Revision: 4916
Modified:
pypy/branch/src-newobjectmodel/pypy/interpreter/error.py
pypy/branch/src-newobjectmodel/pypy/tool/tb_server/__init__.py
pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py
pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py
Log:
print error messages as well as tracebacks!
Modified: pypy/branch/src-newobjectmodel/pypy/interpreter/error.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/interpreter/error.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/interpreter/error.py Fri Jun 4 17:13:37 2004
@@ -1,3 +1,4 @@
+from pypy.tool.tb_server import publish_exc
import os, sys
AUTO_DEBUG = os.getenv('PYPY_DEBUG')
@@ -24,7 +25,7 @@
self.w_type = w_type
self.w_value = w_value
self.application_traceback = tb
- self.debug_tbs = []
+ self.debug_excs = []
def match(self, space, w_check_class):
"Check if this application-level exception matches 'w_check_class'."
@@ -52,7 +53,7 @@
"""Records the current traceback inside the interpreter.
This traceback is only useful to debug the interpreter, not the
application."""
- self.debug_tbs.append(sys.exc_info()[2])
+ self.debug_excs.append(sys.exc_info())
def print_application_traceback(self, space, file=None):
"Dump a standard application-level traceback."
@@ -90,13 +91,13 @@
"""Dump a nice detailed interpreter- and application-level traceback,
useful to debug the interpreter."""
if file is None: file = sys.stderr
- for i in range(len(self.debug_tbs)-1, -1, -1):
+ for i in range(len(self.debug_excs)-1, -1, -1):
import traceback
interpr_file = LinePrefixer(file, '||')
print >> interpr_file, "Traceback (interpreter-level):"
- traceback.print_tb(self.debug_tbs[i], file=interpr_file)
+ traceback.print_tb(self.debug_excs[i][2], file=interpr_file)
from pypy.tool import tb_server
- tb_server.publish_tb(self.debug_tbs[0])
+ tb_server.publish_exc(self.debug_excs[-1])
self.print_app_tb_only(file)
if space is None:
exc_typename = str(self.w_type)
@@ -152,9 +153,11 @@
if hasattr(sys, 'excepthook'): # not implemented on PyPy
def operr_excepthook(exctype, value, traceback):
if issubclass(exctype, OperationError):
- value.debug_tbs.append(traceback)
+ value.debug_excs.append((exctype, value, traceback))
value.print_detailed_traceback()
else:
old_excepthook(exctype, value, traceback)
+ publish_exc((exctype, value, traceback))
+
old_excepthook = sys.excepthook
sys.excepthook = operr_excepthook
Modified: pypy/branch/src-newobjectmodel/pypy/tool/tb_server/__init__.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/tool/tb_server/__init__.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/tool/tb_server/__init__.py Fri Jun 4 17:13:37 2004
@@ -1 +1 @@
-from server import start, stop, publish_tb, wait_until_interrupt
+from server import start, stop, publish_exc, wait_until_interrupt
Modified: pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py Fri Jun 4 17:13:37 2004
@@ -28,21 +28,23 @@
class TracebackView(Renderer):
- def __init__(self, tb):
+ def __init__(self, exc):
self.name = 'traceback%d' % len(views)
views[self.name] = self
- self.tb = tb
+ self.exc = exc
def render_self(self, args):
lines = html.pre()
- for tb in dyncode.listtb(self.tb):
+ for tb in dyncode.listtb(self.exc[2]):
filename = tb.tb_frame.f_code.co_filename
lineno = tb.tb_lineno
name = tb.tb_frame.f_code.co_name
lines.append(' File "%s", line %d, in %s\n'%(
html.a(filename, href='/file' + filename + '#' + str(lineno)).to_unicode().encode('utf-8'),
lineno, name))
- lines.append(dyncode.getline(filename, lineno))
+ lines.append(' '+dyncode.getline(filename, lineno).lstrip())
+ lines.append(xml.escape(
+ ''.join(traceback.format_exception_only(self.exc[0], self.exc[1]))))
return lines
Modified: pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py (original)
+++ pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py Fri Jun 4 17:13:37 2004
@@ -85,11 +85,11 @@
except KeyboardInterrupt:
stop()
-def publish_tb(tb):
+def publish_exc(exc):
if server_thread is None:
return
from pypy.tool.tb_server.render import TracebackView
- x = TracebackView(tb)
+ x = TracebackView(exc)
print "traceback is at http://localhost:%d/%s" % (server_port, x.name)
if __name__ == "__main__":
More information about the Pypy-commit
mailing list