DebugClients/Python/DebugBase.py

branch
debugger speed
changeset 5179
5f56410e7624
parent 5178
878ce843ca9f
child 5183
f7037c006edf
--- a/DebugClients/Python/DebugBase.py	Mon Sep 19 22:47:52 2016 +0200
+++ b/DebugClients/Python/DebugBase.py	Sat Sep 24 22:52:13 2016 +0200
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (c) 2009 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
+# Copyright (c) 2002 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
 #
 
 """
@@ -9,16 +9,24 @@
 
 import sys
 import os
+import types
 import atexit
 import inspect
 import ctypes
-import _thread
 import time
 from inspect import CO_GENERATOR
 
-from DebugUtilities import getargvalues, formatargvalues
 from BreakpointWatch import Breakpoint, Watch
 
+if sys.version_info[0] == 2:
+    import thread as _thread
+    from inspect import getargvalues, formatargvalues
+else:
+    import _thread
+    from DebugUtilities import getargvalues, formatargvalues
+    unicode = str
+    basestring = str
+
 gRecursionLimit = 64
 
 
@@ -65,6 +73,11 @@
         @param dbgClient the owning client
         """
         self._dbgClient = dbgClient
+        if sys.version_info[0] == 2:
+            self.stopOnHandleLine = self._dbgClient.handleLine.func_code
+        else:
+            self.stopOnHandleLine = self._dbgClient.handleLine.__code__
+        
         self._mainThread = True
         self.quitting = 0
         
@@ -380,7 +393,7 @@
         frame.f_trace = self.trace_dispatch
         while frame is not None:
             # stop at erics debugger frame
-            if frame.f_back.f_code == self._dbgClient.handleLine.__code__:
+            if frame.f_back.f_code == self.stopOnHandleLine:
                 frame.f_trace = self.trace_dispatch
                 self.botframe = frame
                 self._dbgClient.mainFrame = frame
@@ -411,7 +424,7 @@
             locals = globals
         
         sys.settrace(self.trace_dispatch)
-        if isinstance(cmd, str):
+        if not isinstance(cmd, types.CodeType):
             cmd = compile(cmd, "<string>", "exec")
         
         try:
@@ -559,6 +572,9 @@
                 lineNo += co_lno
                 lineNumbers.append(lineNo)
             
+            if sys.version_info[0] == 2:
+                lineNo = map(ord, lineNo)
+            
             for bp in Breakpoint.breakInFile[filename]:
                 if bp in lineNumbers:
                     Breakpoint.breakInFrameCache[
@@ -739,7 +755,7 @@
             if excval is None:
                 exitcode = 0
                 message = ""
-            elif isinstance(excval, str):
+            elif isinstance(excval, basestring):
                 exitcode = 1
                 message = excval
             elif isinstance(excval, bytes):
@@ -750,7 +766,7 @@
                 message = ""
             elif isinstance(excval, SystemExit):
                 code = excval.code
-                if isinstance(code, str):
+                if isinstance(code, basestring):
                     exitcode = 1
                     message = code
                 elif isinstance(code, bytes):
@@ -770,7 +786,15 @@
         
         if exctype in [SyntaxError, IndentationError]:
             try:
-                message = str(excval)
+                if sys.version_info[0] == 2:
+                    message = unicode(excval)
+                    try:
+                        message = unicode(excval).encode(
+                            self._dbgClient.getCoding())
+                    except UnicodeError:
+                        message = str(excval)
+                else:
+                    message = str(excval)
                 filename = excval.filename
                 lineno = excval.lineno
                 charno = excval.offset
@@ -816,6 +840,14 @@
         else:
             exctypetxt = str(exctype)
         
+        if sys.version_info[0] == 2:
+            try:
+                excvaltxt = unicode(excval).encode(self._dbgClient.getCoding())
+            except UnicodeError:
+                excvaltxt = str(excval)
+        else:
+            excvaltxt = str(excval)
+        
         stack = []
         if exctb:
             frlist = self.__extract_stack(exctb)
@@ -848,7 +880,7 @@
                 
                 stack.append([filename, linenr, ffunc, fargs])
         
-        self._dbgClient.sendException(exctypetxt, str(excval), stack)
+        self._dbgClient.sendException(exctypetxt, excvaltxt, stack)
         
         if exctb is None:
             return
@@ -864,7 +896,14 @@
         @param exctype type of the exception
         @return exception name (string)
         """
-        return str(exctype).replace("<class '", "").replace("'>", "")
+        if sys.version_info[0] == 2:
+            if type(exctype) in [types.ClassType,   # Python up to 2.4
+                                 types.TypeType]:   # Python 2.5+
+                return exctype.__name__
+            else:
+                return exctype
+        else:
+            return str(exctype).replace("<class '", "").replace("'>", "")
     
     def __extract_stack(self, exctb):
         """

eric ide

mercurial