diff -r 878ce843ca9f -r 5f56410e7624 DebugClients/Python/DebugBase.py --- 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): """