src/eric7/Debugger/DebuggerInterfacePython.py

branch
eric7
changeset 10311
0a141f9ae677
parent 10309
507cafd305f6
child 10318
1e498581a094
diff -r 41a744329b73 -r 0a141f9ae677 src/eric7/Debugger/DebuggerInterfacePython.py
--- a/src/eric7/Debugger/DebuggerInterfacePython.py	Tue Nov 14 16:10:46 2023 +0100
+++ b/src/eric7/Debugger/DebuggerInterfacePython.py	Tue Nov 14 17:25:35 2023 +0100
@@ -202,8 +202,6 @@
 
         self.__inShutdown = False
 
-        debugClient = self.__determineDebugClient()
-
         redirect = (
             str(configOverride["redirect"])
             if configOverride and configOverride["enable"]
@@ -222,16 +220,21 @@
         )
 
         if Preferences.getDebugger("RemoteDbgEnabled"):
+            # remote debugging code
             ipaddr = self.debugServer.getHostAddress(False)
             rexec = Preferences.getDebugger("RemoteExecution")
             rhost = Preferences.getDebugger("RemoteHost")
             if rhost == "":
                 rhost = "localhost"
             if rexec:
+                rdebugClient = Preferences.getDebugger("RemoteDebugClient")
+                if not rdebugClient and rhost == "localhost":
+                    # it is a remote debugging session on the same host
+                    rdebugClient = self.__determineDebugClient()
                 args = Utilities.parseOptionString(rexec) + [
                     rhost,
                     interpreter,
-                    debugClient,
+                    rdebugClient,
                 ]
                 if noencoding:
                     args.append(noencoding)
@@ -275,79 +278,83 @@
                     self.translate = self.__identityTranslation
                 return process, self.__isNetworked, ""
 
-        # set translation function
-        self.translate = self.__identityTranslation
+        else:
+            # local debugging code below
+            debugClient = self.__determineDebugClient()
+
+            # set translation function
+            self.translate = self.__identityTranslation
 
-        # setup the environment for the debugger
-        if Preferences.getDebugger("DebugEnvironmentReplace"):
-            clientEnv = {}
-        else:
-            clientEnv = os.environ.copy()
-            if originalPathString:
-                clientEnv["PATH"] = originalPathString
-        envlist = shlex.split(Preferences.getDebugger("DebugEnvironment"))
-        for el in envlist:
-            with contextlib.suppress(ValueError):
-                key, value = el.split("=", 1)
-                clientEnv[str(key)] = str(value)
-        if execPath:
-            if "PATH" in clientEnv:
-                clientEnv["PATH"] = os.pathsep.join([execPath, clientEnv["PATH"]])
+            # setup the environment for the debugger
+            if Preferences.getDebugger("DebugEnvironmentReplace"):
+                clientEnv = {}
             else:
-                clientEnv["PATH"] = execPath
+                clientEnv = os.environ.copy()
+                if originalPathString:
+                    clientEnv["PATH"] = originalPathString
+            envlist = shlex.split(Preferences.getDebugger("DebugEnvironment"))
+            for el in envlist:
+                with contextlib.suppress(ValueError):
+                    key, value = el.split("=", 1)
+                    clientEnv[str(key)] = str(value)
+            if execPath:
+                if "PATH" in clientEnv:
+                    clientEnv["PATH"] = os.pathsep.join([execPath, clientEnv["PATH"]])
+                else:
+                    clientEnv["PATH"] = execPath
 
-        ipaddr = self.debugServer.getHostAddress(True)
-        if runInConsole or Preferences.getDebugger("ConsoleDbgEnabled"):
-            ccmd = Preferences.getDebugger("ConsoleDbgCommand")
-            if ccmd:
-                args = Utilities.parseOptionString(ccmd) + [
-                    interpreter,
-                    os.path.abspath(debugClient),
-                ]
-                if noencoding:
-                    args.append(noencoding)
-                if multiprocessEnabled:
-                    args.append(multiprocessEnabled)
-                if callTraceOptimization:
-                    args.append(callTraceOptimization)
-                args.extend([str(port), "0", ipaddr])
-                args[0] = FileSystemUtilities.getExecutablePath(args[0])
-                process = self.__startProcess(
-                    args[0], args[1:], clientEnv, workingDir=workingDir
+            ipaddr = self.debugServer.getHostAddress(True)
+            if runInConsole or Preferences.getDebugger("ConsoleDbgEnabled"):
+                ccmd = Preferences.getDebugger("ConsoleDbgCommand")
+                if ccmd:
+                    args = Utilities.parseOptionString(ccmd) + [
+                        interpreter,
+                        os.path.abspath(debugClient),
+                    ]
+                    if noencoding:
+                        args.append(noencoding)
+                    if multiprocessEnabled:
+                        args.append(multiprocessEnabled)
+                    if callTraceOptimization:
+                        args.append(callTraceOptimization)
+                    args.extend([str(port), "0", ipaddr])
+                    args[0] = FileSystemUtilities.getExecutablePath(args[0])
+                    process = self.__startProcess(
+                        args[0], args[1:], clientEnv, workingDir=workingDir
+                    )
+                    if process is None:
+                        EricMessageBox.critical(
+                            None,
+                            self.tr("Start Debugger"),
+                            self.tr(
+                                """<p>The debugger backend could not be"""
+                                """ started.</p>"""
+                            ),
+                        )
+                    return process, self.__isNetworked, interpreter
+
+            args = [debugClient]
+            if noencoding:
+                args.append(noencoding)
+            if multiprocessEnabled:
+                args.append(multiprocessEnabled)
+            if callTraceOptimization:
+                args.append(callTraceOptimization)
+            args.extend([str(port), redirect, ipaddr])
+            process = self.__startProcess(
+                interpreter, args, clientEnv, workingDir=workingDir
+            )
+            if process is None:
+                self.__startedVenv = ""
+                EricMessageBox.critical(
+                    None,
+                    self.tr("Start Debugger"),
+                    self.tr("""<p>The debugger backend could not be started.</p>"""),
                 )
-                if process is None:
-                    EricMessageBox.critical(
-                        None,
-                        self.tr("Start Debugger"),
-                        self.tr(
-                            """<p>The debugger backend could not be"""
-                            """ started.</p>"""
-                        ),
-                    )
-                return process, self.__isNetworked, interpreter
+            else:
+                self.__startedVenv = venvName
 
-        args = [debugClient]
-        if noencoding:
-            args.append(noencoding)
-        if multiprocessEnabled:
-            args.append(multiprocessEnabled)
-        if callTraceOptimization:
-            args.append(callTraceOptimization)
-        args.extend([str(port), redirect, ipaddr])
-        process = self.__startProcess(
-            interpreter, args, clientEnv, workingDir=workingDir
-        )
-        if process is None:
-            self.__startedVenv = ""
-            EricMessageBox.critical(
-                None,
-                self.tr("Start Debugger"),
-                self.tr("""<p>The debugger backend could not be started.</p>"""),
-            )
-        else:
-            self.__startedVenv = venvName
-
-        return process, self.__isNetworked, interpreter
+            return process, self.__isNetworked, interpreter
 
     def __determineDebugClient(self):
         """
@@ -408,13 +415,6 @@
             return None, self.__isNetworked, ""
 
         # start debugger with project specific settings
-        debugClient = project.getDebugProperty("DEBUGCLIENT")
-        if not bool(debugClient) or (
-            not project.getDebugProperty("REMOTEDEBUGGER")
-            and not os.path.exists(debugClient)
-        ):
-            debugClient = self.__determineDebugClient()
-
         redirect = (
             str(configOverride["redirect"])
             if configOverride and configOverride["enable"]
@@ -449,16 +449,21 @@
         self.__inShutdown = False
 
         if project.getDebugProperty("REMOTEDEBUGGER"):
+            # remote debugging code
             ipaddr = self.debugServer.getHostAddress(False)
             rexec = project.getDebugProperty("REMOTECOMMAND")
             rhost = project.getDebugProperty("REMOTEHOST")
             if rhost == "":
                 rhost = "localhost"
             if rexec:
+                rdebugClient = project.getDebugProperty("REMOTEDEBUGCLIENT")
+                if not rdebugClient and rhost == "localhost":
+                    # it is a remote debugging session on the same host
+                    rdebugClient = self.__determineDebugClient()
                 args = Utilities.parseOptionString(rexec) + [
                     rhost,
                     interpreter,
-                    debugClient,
+                    rdebugClient,
                 ]
                 if noencoding:
                     args.append(noencoding)
@@ -500,81 +505,87 @@
                 # remote shell command is missing
                 return None, self.__isNetworked, ""
 
-        # set translation function
-        self.translate = self.__identityTranslation
+        else:
+            # local debugging code below
+            debugClient = project.getDebugProperty("DEBUGCLIENT")
+            if not bool(debugClient) or not os.path.exists(debugClient):
+                debugClient = self.__determineDebugClient()
+
+            # set translation function
+            self.translate = self.__identityTranslation
 
-        # setup the environment for the debugger
-        if project.getDebugProperty("ENVIRONMENTOVERRIDE"):
-            clientEnv = {}
-        else:
-            clientEnv = os.environ.copy()
-            if originalPathString:
-                clientEnv["PATH"] = originalPathString
-        envlist = shlex.split(project.getDebugProperty("ENVIRONMENTSTRING"))
-        for el in envlist:
-            with contextlib.suppress(ValueError):
-                key, value = el.split("=", 1)
-                clientEnv[str(key)] = str(value)
-        if execPath:
-            if "PATH" in clientEnv:
-                clientEnv["PATH"] = os.pathsep.join([execPath, clientEnv["PATH"]])
+            # setup the environment for the debugger
+            if project.getDebugProperty("ENVIRONMENTOVERRIDE"):
+                clientEnv = {}
             else:
-                clientEnv["PATH"] = execPath
+                clientEnv = os.environ.copy()
+                if originalPathString:
+                    clientEnv["PATH"] = originalPathString
+            envlist = shlex.split(project.getDebugProperty("ENVIRONMENTSTRING"))
+            for el in envlist:
+                with contextlib.suppress(ValueError):
+                    key, value = el.split("=", 1)
+                    clientEnv[str(key)] = str(value)
+            if execPath:
+                if "PATH" in clientEnv:
+                    clientEnv["PATH"] = os.pathsep.join([execPath, clientEnv["PATH"]])
+                else:
+                    clientEnv["PATH"] = execPath
 
-        ipaddr = self.debugServer.getHostAddress(True)
-        if runInConsole or project.getDebugProperty("CONSOLEDEBUGGER"):
-            ccmd = project.getDebugProperty(
-                "CONSOLECOMMAND"
-            ) or Preferences.getDebugger("ConsoleDbgCommand")
-            if ccmd:
-                args = Utilities.parseOptionString(ccmd) + [
-                    interpreter,
-                    os.path.abspath(debugClient),
-                ]
-                if noencoding:
-                    args.append(noencoding)
-                if multiprocessEnabled:
-                    args.append(multiprocessEnabled)
-                if callTraceOptimization:
-                    args.append(callTraceOptimization)
-                args.extend([str(port), "0", ipaddr])
-                args[0] = FileSystemUtilities.getExecutablePath(args[0])
-                process = self.__startProcess(
-                    args[0], args[1:], clientEnv, workingDir=workingDir
+            ipaddr = self.debugServer.getHostAddress(True)
+            if runInConsole or project.getDebugProperty("CONSOLEDEBUGGER"):
+                ccmd = project.getDebugProperty(
+                    "CONSOLECOMMAND"
+                ) or Preferences.getDebugger("ConsoleDbgCommand")
+                if ccmd:
+                    args = Utilities.parseOptionString(ccmd) + [
+                        interpreter,
+                        os.path.abspath(debugClient),
+                    ]
+                    if noencoding:
+                        args.append(noencoding)
+                    if multiprocessEnabled:
+                        args.append(multiprocessEnabled)
+                    if callTraceOptimization:
+                        args.append(callTraceOptimization)
+                    args.extend([str(port), "0", ipaddr])
+                    args[0] = FileSystemUtilities.getExecutablePath(args[0])
+                    process = self.__startProcess(
+                        args[0], args[1:], clientEnv, workingDir=workingDir
+                    )
+                    if process is None:
+                        EricMessageBox.critical(
+                            None,
+                            self.tr("Start Debugger"),
+                            self.tr(
+                                """<p>The debugger backend could not be"""
+                                """ started.</p>"""
+                            ),
+                        )
+                    return process, self.__isNetworked, interpreter
+
+            args = [debugClient]
+            if noencoding:
+                args.append(noencoding)
+            if multiprocessEnabled:
+                args.append(multiprocessEnabled)
+            if callTraceOptimization:
+                args.append(callTraceOptimization)
+            args.extend([str(port), redirect, ipaddr])
+            process = self.__startProcess(
+                interpreter, args, clientEnv, workingDir=workingDir
+            )
+            if process is None:
+                self.__startedVenv = ""
+                EricMessageBox.critical(
+                    None,
+                    self.tr("Start Debugger"),
+                    self.tr("""<p>The debugger backend could not be started.</p>"""),
                 )
-                if process is None:
-                    EricMessageBox.critical(
-                        None,
-                        self.tr("Start Debugger"),
-                        self.tr(
-                            """<p>The debugger backend could not be"""
-                            """ started.</p>"""
-                        ),
-                    )
-                return process, self.__isNetworked, interpreter
+            else:
+                self.__startedVenv = venvName
 
-        args = [debugClient]
-        if noencoding:
-            args.append(noencoding)
-        if multiprocessEnabled:
-            args.append(multiprocessEnabled)
-        if callTraceOptimization:
-            args.append(callTraceOptimization)
-        args.extend([str(port), redirect, ipaddr])
-        process = self.__startProcess(
-            interpreter, args, clientEnv, workingDir=workingDir
-        )
-        if process is None:
-            self.__startedVenv = ""
-            EricMessageBox.critical(
-                None,
-                self.tr("Start Debugger"),
-                self.tr("""<p>The debugger backend could not be started.</p>"""),
-            )
-        else:
-            self.__startedVenv = venvName
-
-        return process, self.__isNetworked, interpreter
+            return process, self.__isNetworked, interpreter
 
     def getClientCapabilities(self):
         """

eric ide

mercurial