src/eric7/Debugger/DebugServer.py

branch
eric7-maintenance
changeset 10814
ba20efe10336
parent 10733
d96c69a235fc
parent 10766
d35d6f96c24b
child 11019
27cd57e98461
--- a/src/eric7/Debugger/DebugServer.py	Sun Jun 02 09:51:47 2024 +0200
+++ b/src/eric7/Debugger/DebugServer.py	Wed Jul 03 09:20:41 2024 +0200
@@ -18,6 +18,7 @@
 from eric7 import Preferences
 from eric7.EricWidgets import EricMessageBox
 from eric7.EricWidgets.EricApplication import ericApp
+from eric7.SystemUtilities import FileSystemUtilities
 
 from . import DebugClientCapabilities
 from .BreakPointModel import BreakPointModel
@@ -241,6 +242,8 @@
         self.__autoClearShell = False
         self.__forProject = False
 
+        self.__ericServerDebugging = False
+
         self.clientClearBreak.connect(self.__clientClearBreakPoint)
         self.clientClearWatch.connect(self.__clientClearWatchPoint)
         self.newConnection.connect(self.__newConnection)
@@ -492,28 +495,32 @@
         forProject=False,
         runInConsole=False,
         venvName="",
-        workingDir=None,
+        workingDir="",
         configOverride=None,
+        startRemote=None,
     ):
         """
         Public method to start a debug client.
 
-        @param unplanned flag indicating that the client has died
-        @type bool
-        @param clType type of client to be started
-        @type str
-        @param forProject flag indicating a project related action
-        @type bool
+        @param unplanned flag indicating that the client has died (defaults to True)
+        @type bool (optional)
+        @param clType type of client to be started (defaults to None)
+        @type str (optional)
+        @param forProject flag indicating a project related action (defaults to False)
+        @type bool (optional)
         @param runInConsole flag indicating to start the debugger in a
-            console window
-        @type bool
-        @param venvName name of the virtual environment to be used
-        @type str
-        @param workingDir directory to start the debugger client in
-        @type str
-        @param configOverride dictionary containing the global config override
-            data
-        @type dict
+            console window (defaults to False)
+        @type bool (optional)
+        @param venvName name of the virtual environment to be used (defaults to "")
+        @type str (optional)
+        @param workingDir directory to start the debugger client in (defaults to "")
+        @type str (optional)
+        @param configOverride dictionary containing the global config override data
+            (defaults to None)
+        @type dict (optional)
+        @param startRemote flag indicating to start the client via an eric-ide server
+            (defaults to None)
+        @type bool (optional)
         """
         self.running = False
 
@@ -560,6 +567,7 @@
                         self.__originalPathString,
                         workingDir=workingDir,
                         configOverride=configOverride,
+                        startRemote=startRemote,
                     )
                 else:
                     if not venvName and project.getProjectData(dataKey="EMBEDDED_VENV"):
@@ -576,6 +584,7 @@
                         self.__originalPathString,
                         workingDir=workingDir,
                         configOverride=configOverride,
+                        startRemote=startRemote,
                     )
             else:
                 (
@@ -589,6 +598,7 @@
                     self.__originalPathString,
                     workingDir=workingDir,
                     configOverride=configOverride,
+                    startRemote=startRemote,
                 )
 
             if self.clientProcess:
@@ -606,6 +616,14 @@
                 elif self.__autoClearShell:
                     self.__autoClearShell = False
                     self.remoteBanner()
+            elif startRemote:
+                self.__ericServerDebugging = True
+                if self.lastClientType != self.clientType:
+                    self.lastClientType = self.clientType
+                    self.remoteBanner()
+                elif self.__autoClearShell:
+                    self.__autoClearShell = False
+                    self.remoteBanner()
             else:
                 if clType and self.lastClientType:
                     self.__setClientType(self.lastClientType)
@@ -729,11 +747,20 @@
                 if (fn, lineno) in self.__reportedBreakpointIssues:
                     self.__reportedBreakpointIssues.remove((fn, lineno))
 
-                self.remoteBreakpoint(debuggerId, fn, lineno, True, cond, temp)
-                if not enabled:
-                    self.__remoteBreakpointEnable(debuggerId, fn, lineno, False)
-                if ignorecount:
-                    self.__remoteBreakpointIgnore(debuggerId, fn, lineno, ignorecount)
+                if (
+                    self.__ericServerDebugging
+                    and FileSystemUtilities.isRemoteFileName(fn)
+                ) or (
+                    not self.__ericServerDebugging
+                    and FileSystemUtilities.isPlainFileName(fn)
+                ):
+                    self.remoteBreakpoint(debuggerId, fn, lineno, True, cond, temp)
+                    if not enabled:
+                        self.__remoteBreakpointEnable(debuggerId, fn, lineno, False)
+                    if ignorecount:
+                        self.__remoteBreakpointIgnore(
+                            debuggerId, fn, lineno, ignorecount
+                        )
 
     def __makeWatchCondition(self, cond, special):
         """
@@ -904,12 +931,13 @@
 
     def isClientProcessUp(self):
         """
-        Public method to check, if the debug client process is up.
+        Public method to check, if the debug client process is up or we are
+        doing debugging via the eric-ide server.
 
         @return flag indicating a running debug client process
         @rtype bool
         """
-        return self.clientProcess is not None
+        return self.clientProcess is not None or self.__ericServerDebugging
 
     def __newConnection(self):
         """
@@ -1091,6 +1119,7 @@
             runInConsole=runInConsole,
             venvName=venvName,
             configOverride=configOverride,
+            startRemote=FileSystemUtilities.isRemoteFileName(fn),
         )
 
         self.setCallTraceEnabled("", enableCallTrace)
@@ -1181,6 +1210,7 @@
             runInConsole=runInConsole,
             venvName=venvName,
             configOverride=configOverride,
+            startRemote=FileSystemUtilities.isRemoteFileName(fn),
         )
 
         self.remoteEnvironment(env)
@@ -1263,6 +1293,7 @@
             runInConsole=runInConsole,
             venvName=venvName,
             configOverride=configOverride,
+            startRemote=FileSystemUtilities.isRemoteFileName(fn),
         )
 
         self.remoteEnvironment(env)
@@ -1345,6 +1376,7 @@
             runInConsole=runInConsole,
             venvName=venvName,
             configOverride=configOverride,
+            startRemote=FileSystemUtilities.isRemoteFileName(fn),
         )
 
         self.remoteEnvironment(env)
@@ -1913,6 +1945,7 @@
             self.signalClientOutput(self.tr("\nNot connected\n"))
             self.signalClientStatement(False, "")
         self.running = False
+        self.__ericServerDebugging = False
 
     def signalClientClearBreak(self, filename, lineno, debuggerId):
         """
@@ -2224,3 +2257,12 @@
         except KeyError:
             # The project object is not present
             return ""
+
+    def getEricServerEnvironmentString(self):
+        """
+        Public method to get the string for an eric-ide server environment.
+
+        @return string for the eric-ide server environment
+        @rtype str
+        """
+        return "eric-ide Server"

eric ide

mercurial