--- 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): """