diff -r 874fdd14d3a2 -r 43248bafe9b2 eric6/Debugger/DebuggerInterfacePython.py --- a/eric6/Debugger/DebuggerInterfacePython.py Mon Feb 01 10:38:43 2021 +0100 +++ b/eric6/Debugger/DebuggerInterfacePython.py Tue Mar 02 17:12:08 2021 +0100 @@ -10,6 +10,7 @@ import sys import os import logging +import shlex from PyQt5.QtCore import ( QObject, QProcess, QProcessEnvironment, QTimer @@ -59,6 +60,7 @@ self.__master = None self.__connections = {} self.__pendingConnections = [] + self.__inShutdown = False # set default values for capabilities of clients self.clientCapabilities = ClientDefaultCapabilities @@ -189,6 +191,8 @@ ) return None, False, "" + self.__inShutdown = False + debugClientType = Preferences.getDebugger("DebugClientType3") if debugClientType == "standard": debugClient = os.path.join(getConfig('ericDir'), @@ -265,13 +269,11 @@ clientEnv = os.environ.copy() if originalPathString: clientEnv["PATH"] = originalPathString - envlist = Utilities.parseEnvironmentString( + envlist = shlex.split( Preferences.getDebugger("DebugEnvironment")) for el in envlist: try: key, value = el.split('=', 1) - if value.startswith('"') or value.startswith("'"): - value = value[1:-1] clientEnv[str(key)] = str(value) except ValueError: pass @@ -385,6 +387,8 @@ ) return None, self.__isNetworked, "" + self.__inShutdown = False + if project.getDebugProperty("REMOTEDEBUGGER"): ipaddr = self.debugServer.getHostAddress(False) rexec = project.getDebugProperty("REMOTECOMMAND") @@ -442,13 +446,11 @@ clientEnv = os.environ.copy() if originalPathString: clientEnv["PATH"] = originalPathString - envlist = Utilities.parseEnvironmentString( + envlist = shlex.split( project.getDebugProperty("ENVIRONMENTSTRING")) for el in envlist: try: key, value = el.split('=', 1) - if value.startswith('"') or value.startswith("'"): - value = value[1:-1] clientEnv[str(key)] = str(value) except ValueError: pass @@ -578,7 +580,8 @@ self.__master = None if debuggerId in self.__autoContinued: self.__autoContinued.remove(debuggerId) - self.debugServer.signalClientDisconnected(debuggerId) + if not self.__inShutdown: + self.debugServer.signalClientDisconnected(debuggerId) break else: if sock in self.__pendingConnections: @@ -626,6 +629,8 @@ if not self.__master: return + self.__inShutdown = True + while self.__connections: debuggerId, sock = self.__connections.popitem() self.__shutdownSocket(sock) @@ -675,9 +680,8 @@ @param env environment settings @type dict """ - if self.__master: - self.__sendJsonCommand("RequestEnvironment", {"environment": env}, - self.__master) + self.__sendJsonCommand("RequestEnvironment", {"environment": env}, + self.__master) def remoteLoad(self, fn, argv, wd, traceInterpreter=False, autoContinue=True, enableMultiprocess=False): @@ -1506,6 +1510,8 @@ self.debugServer.signalClientExit( params["program"], params["status"], params["message"], params["debuggerId"]) + if params["debuggerId"] == self.__master: + self.debugServer.signalMainClientExit() elif method == "PassiveStartup": self.debugServer.passiveStartUp(