[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