Sun, 11 Sep 2016 13:11:58 +0200
Some cleanups in the debugger backends.
--- a/APIs/Python3/eric6.api Sat Sep 10 19:32:56 2016 +0200 +++ b/APIs/Python3/eric6.api Sun Sep 11 13:11:58 2016 +0200 @@ -169,7 +169,7 @@ eric6.DebugClients.Python2.DebugBase.DebugBase.set_continue?4(special) eric6.DebugClients.Python2.DebugBase.DebugBase.set_quit?4() eric6.DebugClients.Python2.DebugBase.DebugBase.set_trace?4(frame=None) -eric6.DebugClients.Python2.DebugBase.DebugBase.set_watch?4(cond, temporary=0) +eric6.DebugClients.Python2.DebugBase.DebugBase.set_watch?4(cond, temporary=False) eric6.DebugClients.Python2.DebugBase.DebugBase.step?4(traceMode) eric6.DebugClients.Python2.DebugBase.DebugBase.stepOut?4() eric6.DebugClients.Python2.DebugBase.DebugBase.stop_here?4(frame) @@ -185,7 +185,7 @@ eric6.DebugClients.Python2.DebugClient.DebugClient.debugClient?7 eric6.DebugClients.Python2.DebugClient.DebugClient?1() eric6.DebugClients.Python2.DebugClientBase.DebugClientBase.absPath?4(fn) -eric6.DebugClients.Python2.DebugClientBase.DebugClientBase.attachThread?4(target=None, args=None, kwargs=None, mainThread=0) +eric6.DebugClients.Python2.DebugClientBase.DebugClientBase.attachThread?4(target=None, args=None, kwargs=None, mainThread=False) eric6.DebugClients.Python2.DebugClientBase.DebugClientBase.clientCapabilities?7 eric6.DebugClients.Python2.DebugClientBase.DebugClientBase.close?4(fd) eric6.DebugClients.Python2.DebugClientBase.DebugClientBase.connectDebugger?4(port, remoteAddress=None, redirect=1) @@ -230,10 +230,10 @@ eric6.DebugClients.Python2.DebugClientCapabilities.HasProfiler?7 eric6.DebugClients.Python2.DebugClientCapabilities.HasShell?7 eric6.DebugClients.Python2.DebugClientCapabilities.HasUnittest?7 -eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.attachThread?4(target=None, args=None, kwargs=None, mainThread=0) +eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.attachThread?4(target=None, args=None, kwargs=None, mainThread=False) eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.debugClient?7 eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.eventLoop?4(disablePolling=False) -eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.lockClient?4(blocking=1) +eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.lockClient?4(blocking=True) eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.setCurrentThread?4(id) eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.set_quit?4() eric6.DebugClients.Python2.DebugClientThreads.DebugClientThreads.threadTerminated?4(dbgThread)
--- a/DebugClients/Python2/AsyncFile.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python2/AsyncFile.py Sun Sep 11 13:11:58 2016 +0200 @@ -64,7 +64,7 @@ @exception IOError raised to indicate a bad file descriptor """ if mode != self.mode: - raise IOError('[Errno 9] Bad file descriptor') + raise IOError((9, '[Errno 9] Bad file descriptor')) def __nWrite(self, n): """ @@ -254,12 +254,12 @@ """ Public method to move the filepointer. - @param offset offset to seek for - @param whence where to seek from + @param offset offset to move the filepointer to (integer) + @param whence position the offset relates to @exception IOError This method is not supported and always raises an IOError. """ - raise IOError('[Errno 29] Illegal seek') + raise IOError((29, '[Errno 29] Illegal seek')) def tell(self): """ @@ -268,7 +268,7 @@ @exception IOError This method is not supported and always raises an IOError. """ - raise IOError('[Errno 29] Illegal seek') + raise IOError((29, '[Errno 29] Illegal seek')) def truncate(self, size=-1): """ @@ -278,7 +278,7 @@ @exception IOError This method is not supported and always raises an IOError. """ - raise IOError('[Errno 29] Illegal seek') + raise IOError((29, '[Errno 29] Illegal seek')) def writable(self): """
--- a/DebugClients/Python2/DebugBase.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python2/DebugBase.py Sun Sep 11 13:11:58 2016 +0200 @@ -132,7 +132,7 @@ """ Public method to perform a step operation in this thread. - @param traceMode If it is non-zero, then the step is a step into, + @param traceMode If it is True, then the step is a step into, otherwise it is a step over. """ self.stepFrame = self.currentFrame @@ -397,7 +397,7 @@ return frame.f_code.co_filename - def set_watch(self, cond, temporary=0): + def set_watch(self, cond, temporary=False): """ Public method to set a watch expression. @@ -468,7 +468,7 @@ possibles = bdb.Breakpoint.bplist["Watch", 0] for i in range(0, len(possibles)): b = possibles[i] - if b.enabled == 0: + if not b.enabled: continue if not b.cond: # watch expression without expression shouldn't occur, @@ -501,7 +501,7 @@ b.ignore -= 1 continue else: - return (b, 1) + return (b, True) except Exception: if b.special: try: @@ -574,8 +574,8 @@ Because eric6 supports only one breakpoint per line, this overwritten method will return this one and only breakpoint. - @param filename filename of the bp to retrieve (string) - @param lineno linenumber of the bp to retrieve (integer) + @param filename file name of the bp to retrieve (string) + @param lineno line number of the bp to retrieve (integer) @return breakpoint or None, if there is no bp """ filename = self.canonic(filename)
--- a/DebugClients/Python2/DebugClient.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python2/DebugClient.py Sun Sep 11 13:11:58 2016 +0200 @@ -4,7 +4,7 @@ # """ -Module implementing a Qt free version of the debug client. +Module implementing a non-threaded variant of the debug client. """ from DebugBase import DebugBase
--- a/DebugClients/Python2/DebugClientBase.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python2/DebugClientBase.py Sun Sep 11 13:11:58 2016 +0200 @@ -70,7 +70,7 @@ @param prompt prompt to be shown (string) @return result of the input() call """ - if DebugClientInstance is None or DebugClientInstance.redirect == 0: + if DebugClientInstance is None or not DebugClientInstance.redirect: return DebugClientOrigInput(prompt) return DebugClientInstance.input(prompt) @@ -179,8 +179,8 @@ # dictionary of all threads running self.threads = {} - # the "current" thread, basically the thread we are at a - # breakpoint for. + # the "current" thread, basically the thread we are at a breakpoint + # for. self.currentThread = self # special objects representing the main scripts thread and frame @@ -225,10 +225,7 @@ # commandline completion stuff self.complete = Completer(self.debugMod.__dict__).complete - if sys.hexversion < 0x2020000: - self.compile_command = codeop.compile_command - else: - self.compile_command = codeop.CommandCompiler() + self.compile_command = codeop.CommandCompiler() self.coding_re = re.compile(r"coding[:=]\s*([-\w_.]+)") self.defaultCoding = 'utf-8' @@ -270,21 +267,19 @@ return self.__coding = default - def attachThread(self, target=None, args=None, kwargs=None, mainThread=0): + def attachThread(self, target=None, args=None, kwargs=None, + mainThread=False): """ Public method to setup a thread for DebugClient to debug. - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. - This is just an empty function and is overridden in the threaded - debugger. - @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target - @param mainThread non-zero, if we are attaching to the already + @param mainThread True, if we are attaching to the already started mainthread of the app """ if self.debugging: @@ -1360,8 +1355,8 @@ @param frmnr distance of frame reported on. 0 is the current frame (int) @param scope 1 to report global variables, 0 for local variables (int) - @param filter the indices of variable types to be filtered (list of - int) + @param filter the indices of variable types to be filtered + (list of int) """ if self.currentThread is None: return @@ -2061,7 +2056,7 @@ self.sendPassiveStartup(self.running, exceptions) self.__interact() - self.attachThread(mainThread=1) + self.attachThread(mainThread=True) self.mainThread.tracePython = tracePython # set the system exception handling function to ensure, that @@ -2089,7 +2084,7 @@ @param *args arguments being passed to func @return result of the function call """ - self.startDebugger(scriptname, enableTrace=0) + self.startDebugger(scriptname, enableTrace=False) res = self.mainThread.runcall(func, *args) self.progTerminated(res) return res @@ -2208,8 +2203,8 @@ def fork(self): """ - Public method implementing a fork routine deciding which branch to - follow. + Public method implementing a fork routine deciding which branch + to follow. @return process ID (integer) """
--- a/DebugClients/Python2/DebugClientThreads.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python2/DebugClientThreads.py Sun Sep 11 13:11:58 2016 +0200 @@ -74,20 +74,21 @@ self.variant = 'Threaded' - def attachThread(self, target=None, args=None, kwargs=None, mainThread=0): + def attachThread(self, target=None, args=None, kwargs=None, + mainThread=False): """ Public method to setup a thread for DebugClient to debug. - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. @param target the start function of the target thread (i.e. the user code) @param args arguments to pass to target @param kwargs keyword arguments to pass to target - @param mainThread non-zero, if we are attaching to the already + @param mainThread True, if we are attaching to the already started mainthread of the app - @return The identifier of the created thread + @return identifier of the created thread """ try: self.lockClient() @@ -123,12 +124,14 @@ finally: self.unlockClient() - def lockClient(self, blocking=1): + def lockClient(self, blocking=True): """ Public method to acquire the lock for this client. @param blocking flag to indicating a blocking lock + @type bool @return flag indicating successful locking + @rtype bool """ if blocking: self.clientLock.acquire() @@ -179,7 +182,7 @@ Public method to do a 'set quit' on all threads. """ try: - locked = self.lockClient(0) + locked = self.lockClient(False) try: for key in self.threads.keys(): self.threads[key].set_quit()
--- a/DebugClients/Python2/DebugThread.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python2/DebugThread.py Sun Sep 11 13:11:58 2016 +0200 @@ -40,7 +40,7 @@ self._kwargs = kwargs self._mainThread = mainThread # thread running tracks execution state of client code - # it will always be 0 for main thread as that is tracked + # it will always be False for main thread as that is tracked # by DebugClientThreads and Bdb... self._threadRunning = False @@ -78,7 +78,7 @@ """ self.set_trace() if not self._mainThread: - self.set_continue(0) + self.set_continue(False) def bootstrap(self): """
--- a/DebugClients/Python2/eric6dbgstub.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python2/eric6dbgstub.py Sun Sep 11 13:11:58 2016 +0200 @@ -33,7 +33,7 @@ was requested """ global debugger - res = 1 + res = True try: if kind == "standard": import DebugClient @@ -45,7 +45,7 @@ raise ValueError except ImportError: debugger = None - res = 0 + res = False return res
--- a/DebugClients/Python3/AsyncFile.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python3/AsyncFile.py Sun Sep 11 13:11:58 2016 +0200 @@ -274,7 +274,7 @@ """ Public method to truncate the file. - @param size size to truncaze to (integer) + @param size size to truncate to (integer) @exception IOError This method is not supported and always raises an IOError. """
--- a/DebugClients/Python3/DebugBase.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python3/DebugBase.py Sun Sep 11 13:11:58 2016 +0200 @@ -578,8 +578,8 @@ Because eric6 supports only one breakpoint per line, this overwritten method will return this one and only breakpoint. - @param filename the filename of the bp to retrieve (string) - @param lineno the linenumber of the bp to retrieve (integer) + @param filename file name of the bp to retrieve (string) + @param lineno line number of the bp to retrieve (integer) @return breakpoint or None, if there is no bp """ filename = self.canonic(filename) @@ -849,8 +849,8 @@ def user_return(self, frame, retval): """ - Public method reimplemented to report program termination to the debug - server. + Public method reimplemented to report program termination to the + debug server. @param frame the frame object @param retval the return value of the program
--- a/DebugClients/Python3/DebugClientBase.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python3/DebugClientBase.py Sun Sep 11 13:11:58 2016 +0200 @@ -245,7 +245,7 @@ """ Public method to setup a thread for DebugClient to debug. - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. @param target the start function of the target thread (i.e. the
--- a/DebugClients/Python3/DebugClientThreads.py Sat Sep 10 19:32:56 2016 +0200 +++ b/DebugClients/Python3/DebugClientThreads.py Sun Sep 11 13:11:58 2016 +0200 @@ -79,7 +79,7 @@ """ Public method to setup a thread for DebugClient to debug. - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. @param target the start function of the target thread (i.e. the @@ -128,7 +128,9 @@ Public method to acquire the lock for this client. @param blocking flag to indicating a blocking lock + @type bool @return flag indicating successful locking + @rtype bool """ if blocking: self.clientLock.acquire()
--- a/Documentation/Source/eric6.DebugClients.Python2.AsyncFile.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python2.AsyncFile.html Sun Sep 11 13:11:58 2016 +0200 @@ -318,10 +318,10 @@ </p><dl> <dt><i>offset</i></dt> <dd> -offset to seek for +offset to move the filepointer to (integer) </dd><dt><i>whence</i></dt> <dd> -where to seek from +position the offset relates to </dd> </dl><dl> <dt>Raises <b>IOError</b>:</dt>
--- a/Documentation/Source/eric6.DebugClients.Python2.DebugBase.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python2.DebugBase.html Sun Sep 11 13:11:58 2016 +0200 @@ -479,10 +479,10 @@ </p><dl> <dt><i>filename</i></dt> <dd> -filename of the bp to retrieve (string) +file name of the bp to retrieve (string) </dd><dt><i>lineno</i></dt> <dd> -linenumber of the bp to retrieve (integer) +line number of the bp to retrieve (integer) </dd> </dl><dl> <dt>Returns:</dt> @@ -588,7 +588,7 @@ </dd> </dl><a NAME="DebugBase.set_watch" ID="DebugBase.set_watch"></a> <h4>DebugBase.set_watch</h4> -<b>set_watch</b>(<i>cond, temporary=0</i>) +<b>set_watch</b>(<i>cond, temporary=False</i>) <p> Public method to set a watch expression. </p><dl> @@ -607,7 +607,7 @@ </p><dl> <dt><i>traceMode</i></dt> <dd> -If it is non-zero, then the step is a step into, +If it is True, then the step is a step into, otherwise it is a step over. </dd> </dl><a NAME="DebugBase.stepOut" ID="DebugBase.stepOut"></a>
--- a/Documentation/Source/eric6.DebugClients.Python2.DebugClient.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python2.DebugClient.html Sun Sep 11 13:11:58 2016 +0200 @@ -21,7 +21,7 @@ <body><a NAME="top" ID="top"></a> <h1>eric6.DebugClients.Python2.DebugClient</h1> <p> -Module implementing a Qt free version of the debug client. +Module implementing a non-threaded variant of the debug client. </p> <h3>Global Attributes</h3> <table>
--- a/Documentation/Source/eric6.DebugClients.Python2.DebugClientBase.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python2.DebugClientBase.html Sun Sep 11 13:11:58 2016 +0200 @@ -299,8 +299,8 @@ 1 to report global variables, 0 for local variables (int) </dd><dt><i>filter</i></dt> <dd> -the indices of variable types to be filtered (list of - int) +the indices of variable types to be filtered + (list of int) </dd> </dl><a NAME="DebugClientBase.__formatQtVariable" ID="DebugClientBase.__formatQtVariable"></a> <h4>DebugClientBase.__formatQtVariable</h4> @@ -494,15 +494,12 @@ </dd> </dl><a NAME="DebugClientBase.attachThread" ID="DebugClientBase.attachThread"></a> <h4>DebugClientBase.attachThread</h4> -<b>attachThread</b>(<i>target=None, args=None, kwargs=None, mainThread=0</i>) +<b>attachThread</b>(<i>target=None, args=None, kwargs=None, mainThread=False</i>) <p> Public method to setup a thread for DebugClient to debug. </p><p> - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. -</p><p> - This is just an empty function and is overridden in the threaded - debugger. </p><dl> <dt><i>target</i></dt> <dd> @@ -516,7 +513,7 @@ keyword arguments to pass to target </dd><dt><i>mainThread</i></dt> <dd> -non-zero, if we are attaching to the already +True, if we are attaching to the already started mainthread of the app </dd> </dl><a NAME="DebugClientBase.close" ID="DebugClientBase.close"></a> @@ -574,8 +571,8 @@ <h4>DebugClientBase.fork</h4> <b>fork</b>(<i></i>) <p> - Public method implementing a fork routine deciding which branch to - follow. + Public method implementing a fork routine deciding which branch + to follow. </p><dl> <dt>Returns:</dt> <dd>
--- a/Documentation/Source/eric6.DebugClients.Python2.DebugClientThreads.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python2.DebugClientThreads.html Sun Sep 11 13:11:58 2016 +0200 @@ -99,11 +99,11 @@ Constructor </p><a NAME="DebugClientThreads.attachThread" ID="DebugClientThreads.attachThread"></a> <h4>DebugClientThreads.attachThread</h4> -<b>attachThread</b>(<i>target=None, args=None, kwargs=None, mainThread=0</i>) +<b>attachThread</b>(<i>target=None, args=None, kwargs=None, mainThread=False</i>) <p> Public method to setup a thread for DebugClient to debug. </p><p> - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. </p><dl> <dt><i>target</i></dt> @@ -118,13 +118,13 @@ keyword arguments to pass to target </dd><dt><i>mainThread</i></dt> <dd> -non-zero, if we are attaching to the already +True, if we are attaching to the already started mainthread of the app </dd> </dl><dl> <dt>Returns:</dt> <dd> -The identifier of the created thread +identifier of the created thread </dd> </dl><a NAME="DebugClientThreads.eventLoop" ID="DebugClientThreads.eventLoop"></a> <h4>DebugClientThreads.eventLoop</h4> @@ -139,11 +139,11 @@ </dd> </dl><a NAME="DebugClientThreads.lockClient" ID="DebugClientThreads.lockClient"></a> <h4>DebugClientThreads.lockClient</h4> -<b>lockClient</b>(<i>blocking=1</i>) +<b>lockClient</b>(<i>blocking=True</i>) <p> Public method to acquire the lock for this client. </p><dl> -<dt><i>blocking</i></dt> +<dt><i>blocking</i> (bool)</dt> <dd> flag to indicating a blocking lock </dd> @@ -152,6 +152,11 @@ <dd> flag indicating successful locking </dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> </dl><a NAME="DebugClientThreads.setCurrentThread" ID="DebugClientThreads.setCurrentThread"></a> <h4>DebugClientThreads.setCurrentThread</h4> <b>setCurrentThread</b>(<i>id</i>)
--- a/Documentation/Source/eric6.DebugClients.Python3.AsyncFile.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python3.AsyncFile.html Sun Sep 11 13:11:58 2016 +0200 @@ -358,7 +358,7 @@ </p><dl> <dt><i>size</i></dt> <dd> -size to truncaze to (integer) +size to truncate to (integer) </dd> </dl><dl> <dt>Raises <b>IOError</b>:</dt>
--- a/Documentation/Source/eric6.DebugClients.Python3.DebugBase.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python3.DebugBase.html Sun Sep 11 13:11:58 2016 +0200 @@ -498,10 +498,10 @@ </p><dl> <dt><i>filename</i></dt> <dd> -the filename of the bp to retrieve (string) +file name of the bp to retrieve (string) </dd><dt><i>lineno</i></dt> <dd> -the linenumber of the bp to retrieve (integer) +line number of the bp to retrieve (integer) </dd> </dl><dl> <dt>Returns:</dt> @@ -720,8 +720,8 @@ <h4>DebugBase.user_return</h4> <b>user_return</b>(<i>frame, retval</i>) <p> - Public method reimplemented to report program termination to the debug - server. + Public method reimplemented to report program termination to the + debug server. </p><dl> <dt><i>frame</i></dt> <dd>
--- a/Documentation/Source/eric6.DebugClients.Python3.DebugClientBase.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python3.DebugClientBase.html Sun Sep 11 13:11:58 2016 +0200 @@ -513,7 +513,7 @@ <p> Public method to setup a thread for DebugClient to debug. </p><p> - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. </p><dl> <dt><i>target</i></dt>
--- a/Documentation/Source/eric6.DebugClients.Python3.DebugClientThreads.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/eric6.DebugClients.Python3.DebugClientThreads.html Sun Sep 11 13:11:58 2016 +0200 @@ -103,7 +103,7 @@ <p> Public method to setup a thread for DebugClient to debug. </p><p> - If mainThread is non-zero, then we are attaching to the already + If mainThread is True, then we are attaching to the already started mainthread of the app and the rest of the args are ignored. </p><dl> <dt><i>target</i></dt> @@ -143,7 +143,7 @@ <p> Public method to acquire the lock for this client. </p><dl> -<dt><i>blocking</i></dt> +<dt><i>blocking</i> (bool)</dt> <dd> flag to indicating a blocking lock </dd> @@ -152,6 +152,11 @@ <dd> flag indicating successful locking </dd> +</dl><dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> </dl><a NAME="DebugClientThreads.setCurrentThread" ID="DebugClientThreads.setCurrentThread"></a> <h4>DebugClientThreads.setCurrentThread</h4> <b>setCurrentThread</b>(<i>id</i>)
--- a/Documentation/Source/index-eric6.DebugClients.Python2.html Sat Sep 10 19:32:56 2016 +0200 +++ b/Documentation/Source/index-eric6.DebugClients.Python2.html Sun Sep 11 13:11:58 2016 +0200 @@ -40,7 +40,7 @@ <td>Module implementing the debug base class.</td> </tr><tr> <td><a href="eric6.DebugClients.Python2.DebugClient.html">DebugClient</a></td> -<td>Module implementing a Qt free version of the debug client.</td> +<td>Module implementing a non-threaded variant of the debug client.</td> </tr><tr> <td><a href="eric6.DebugClients.Python2.DebugClientBase.html">DebugClientBase</a></td> <td>Module implementing a debug client base class.</td>