eric6/Debugger/DebuggerInterfacePython.py

branch
maintenance
changeset 8142
43248bafe9b2
parent 8043
0acf98cd089a
parent 8138
169e65a6787c
child 8176
31965986ecd1
--- 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(

eric ide

mercurial