170 passiveDebugStarted = pyqtSignal(str, bool) |
170 passiveDebugStarted = pyqtSignal(str, bool) |
171 callTraceInfo = pyqtSignal(bool, str, str, str, str, str, str, str) |
171 callTraceInfo = pyqtSignal(bool, str, str, str, str, str, str, str) |
172 appendStdout = pyqtSignal(str) |
172 appendStdout = pyqtSignal(str) |
173 |
173 |
174 def __init__(self, originalPathString, preventPassiveDebugging=False, |
174 def __init__(self, originalPathString, preventPassiveDebugging=False, |
175 project=None): |
175 project=None, parent=None): |
176 """ |
176 """ |
177 Constructor |
177 Constructor |
178 |
178 |
179 @param originalPathString original PATH environment variable |
179 @param originalPathString original PATH environment variable |
180 @type str |
180 @type str |
181 @param preventPassiveDebugging flag overriding the PassiveDbgEnabled |
181 @param preventPassiveDebugging flag overriding the PassiveDbgEnabled |
182 setting (defaults to False) |
182 setting (defaults to False) |
183 @type bool (optional) |
183 @type bool (optional) |
184 @param project reference to the project object (defaults to None) |
184 @param project reference to the project object (defaults to None) |
185 @type Project (optional) |
185 @type Project (optional) |
186 """ |
186 @param parent reference to the parent object |
187 super(DebugServer, self).__init__() |
187 @type QObject |
|
188 """ |
|
189 super(DebugServer, self).__init__(parent) |
188 |
190 |
189 self.__originalPathString = originalPathString |
191 self.__originalPathString = originalPathString |
190 |
192 |
191 self.__debuggerInterfaces = {} |
193 self.__debuggerInterfaces = {} |
192 # the interface name is the key, a function to get the |
194 # the interface name is the key, a function to get the |
210 self.__reportedBreakpointIssues = [] |
212 self.__reportedBreakpointIssues = [] |
211 self.__reportedWatchpointIssues = [] |
213 self.__reportedWatchpointIssues = [] |
212 |
214 |
213 self.networkInterface = Preferences.getDebugger("NetworkInterface") |
215 self.networkInterface = Preferences.getDebugger("NetworkInterface") |
214 if self.networkInterface == "all": |
216 if self.networkInterface == "all": |
215 hostAddress = QHostAddress("0.0.0.0") # QHostAddress.Any) # secok |
217 hostAddress = QHostAddress("0.0.0.0") |
|
218 # QHostAddress.SpecialAddress.Any) # secok |
216 elif self.networkInterface == "allv6": |
219 elif self.networkInterface == "allv6": |
217 hostAddress = QHostAddress("::") # QHostAddress.AnyIPv6) |
220 hostAddress = QHostAddress("::") |
|
221 # QHostAddress.SpecialAddress.AnyIPv6) |
218 else: |
222 else: |
219 hostAddress = QHostAddress(self.networkInterface) |
223 hostAddress = QHostAddress(self.networkInterface) |
220 self.networkInterfaceName, self.networkInterfaceIndex = ( |
224 self.networkInterfaceName, self.networkInterfaceIndex = ( |
221 self.__getNetworkInterfaceAndIndex(self.networkInterface)) |
225 self.__getNetworkInterfaceAndIndex(self.networkInterface)) |
222 |
226 |
478 self.clientType = clType |
482 self.clientType = clType |
479 Preferences.Prefs.settings.setValue( |
483 Preferences.Prefs.settings.setValue( |
480 'DebugClient/Type', self.clientType) |
484 'DebugClient/Type', self.clientType) |
481 |
485 |
482 def startClient(self, unplanned=True, clType=None, forProject=False, |
486 def startClient(self, unplanned=True, clType=None, forProject=False, |
483 runInConsole=False, venvName="", workingDir=None): |
487 runInConsole=False, venvName="", workingDir=None, |
|
488 configOverride=None): |
484 """ |
489 """ |
485 Public method to start a debug client. |
490 Public method to start a debug client. |
486 |
491 |
487 @param unplanned flag indicating that the client has died |
492 @param unplanned flag indicating that the client has died |
488 @type bool |
493 @type bool |
527 project = e5App().getObject("Project") |
535 project = e5App().getObject("Project") |
528 if not project.isDebugPropertiesLoaded(): |
536 if not project.isDebugPropertiesLoaded(): |
529 self.clientProcess, isNetworked, clientInterpreter = ( |
537 self.clientProcess, isNetworked, clientInterpreter = ( |
530 self.debuggerInterface.startRemote( |
538 self.debuggerInterface.startRemote( |
531 self.serverPort(), runInConsole, venvName, |
539 self.serverPort(), runInConsole, venvName, |
532 self.__originalPathString, workingDir=workingDir)) |
540 self.__originalPathString, workingDir=workingDir, |
|
541 configOverride=configOverride)) |
533 else: |
542 else: |
534 self.clientProcess, isNetworked, clientInterpreter = ( |
543 self.clientProcess, isNetworked, clientInterpreter = ( |
535 self.debuggerInterface.startRemoteForProject( |
544 self.debuggerInterface.startRemoteForProject( |
536 self.serverPort(), runInConsole, venvName, |
545 self.serverPort(), runInConsole, venvName, |
537 self.__originalPathString, workingDir=workingDir)) |
546 self.__originalPathString, workingDir=workingDir, |
|
547 configOverride=configOverride)) |
538 else: |
548 else: |
539 self.clientProcess, isNetworked, clientInterpreter = ( |
549 self.clientProcess, isNetworked, clientInterpreter = ( |
540 self.debuggerInterface.startRemote( |
550 self.debuggerInterface.startRemote( |
541 self.serverPort(), runInConsole, venvName, |
551 self.serverPort(), runInConsole, venvName, |
542 self.__originalPathString, workingDir=workingDir)) |
552 self.__originalPathString, workingDir=workingDir, |
|
553 configOverride=configOverride)) |
543 |
554 |
544 if self.clientProcess: |
555 if self.clientProcess: |
545 self.clientProcess.readyReadStandardError.connect( |
556 self.clientProcess.readyReadStandardError.connect( |
546 self.__clientProcessError) |
557 self.__clientProcessError) |
547 self.clientProcess.readyReadStandardOutput.connect( |
558 self.clientProcess.readyReadStandardOutput.connect( |
927 self.debuggerInterface.remoteEnvironment(envdict) |
938 self.debuggerInterface.remoteEnvironment(envdict) |
928 |
939 |
929 def remoteLoad(self, venvName, fn, argv, wd, env, autoClearShell=True, |
940 def remoteLoad(self, venvName, fn, argv, wd, env, autoClearShell=True, |
930 tracePython=False, autoContinue=True, forProject=False, |
941 tracePython=False, autoContinue=True, forProject=False, |
931 runInConsole=False, clientType="", enableCallTrace=False, |
942 runInConsole=False, clientType="", enableCallTrace=False, |
932 enableMultiprocess=False, multiprocessNoDebug=""): |
943 enableMultiprocess=False, multiprocessNoDebug="", |
|
944 configOverride=None): |
933 """ |
945 """ |
934 Public method to load a new program to debug. |
946 Public method to load a new program to debug. |
935 |
947 |
936 @param venvName name of the virtual environment to be used |
948 @param venvName name of the virtual environment to be used |
937 @type str |
949 @type str |
993 self.__setClientType( |
1008 self.__setClientType( |
994 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
1009 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
995 except KeyError: |
1010 except KeyError: |
996 self.__setClientType('Python3') # assume it is a Python3 file |
1011 self.__setClientType('Python3') # assume it is a Python3 file |
997 self.startClient(False, forProject=forProject, |
1012 self.startClient(False, forProject=forProject, |
998 runInConsole=runInConsole, venvName=venvName) |
1013 runInConsole=runInConsole, venvName=venvName, |
|
1014 configOverride=configOverride) |
999 |
1015 |
1000 self.setCallTraceEnabled("", enableCallTrace) |
1016 self.setCallTraceEnabled("", enableCallTrace) |
1001 self.remoteEnvironment(env) |
1017 self.remoteEnvironment(env) |
1002 |
1018 |
1003 self.debuggerInterface.remoteLoad( |
1019 self.debuggerInterface.remoteLoad( |
1009 self.__restoreBreakpoints() |
1025 self.__restoreBreakpoints() |
1010 self.__restoreWatchpoints() |
1026 self.__restoreWatchpoints() |
1011 self.__restoreNoDebugList() |
1027 self.__restoreNoDebugList() |
1012 |
1028 |
1013 def remoteRun(self, venvName, fn, argv, wd, env, autoClearShell=True, |
1029 def remoteRun(self, venvName, fn, argv, wd, env, autoClearShell=True, |
1014 forProject=False, runInConsole=False, clientType=""): |
1030 forProject=False, runInConsole=False, clientType="", |
|
1031 configOverride=None): |
1015 """ |
1032 """ |
1016 Public method to load a new program to run. |
1033 Public method to load a new program to run. |
1017 |
1034 |
1018 @param venvName name of the virtual environment to be used |
1035 @param venvName name of the virtual environment to be used |
1019 @type str |
1036 @type str |
1057 self.__setClientType( |
1077 self.__setClientType( |
1058 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
1078 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
1059 except KeyError: |
1079 except KeyError: |
1060 self.__setClientType('Python3') # assume it is a Python3 file |
1080 self.__setClientType('Python3') # assume it is a Python3 file |
1061 self.startClient(False, forProject=forProject, |
1081 self.startClient(False, forProject=forProject, |
1062 runInConsole=runInConsole, venvName=venvName) |
1082 runInConsole=runInConsole, venvName=venvName, |
|
1083 configOverride=configOverride) |
1063 |
1084 |
1064 self.remoteEnvironment(env) |
1085 self.remoteEnvironment(env) |
1065 |
1086 |
1066 self.debuggerInterface.remoteRun(fn, argv, wd) |
1087 self.debuggerInterface.remoteRun(fn, argv, wd) |
1067 self.debugging = False |
1088 self.debugging = False |
1068 self.running = True |
1089 self.running = True |
1069 |
1090 |
1070 def remoteCoverage(self, venvName, fn, argv, wd, env, |
1091 def remoteCoverage(self, venvName, fn, argv, wd, env, |
1071 autoClearShell=True, erase=False, forProject=False, |
1092 autoClearShell=True, erase=False, forProject=False, |
1072 runInConsole=False, clientType=""): |
1093 runInConsole=False, clientType="", configOverride=None): |
1073 """ |
1094 """ |
1074 Public method to load a new program to collect coverage data. |
1095 Public method to load a new program to collect coverage data. |
1075 |
1096 |
1076 @param venvName name of the virtual environment to be used |
1097 @param venvName name of the virtual environment to be used |
1077 @type str |
1098 @type str |
1118 self.__setClientType( |
1142 self.__setClientType( |
1119 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
1143 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
1120 except KeyError: |
1144 except KeyError: |
1121 self.__setClientType('Python3') # assume it is a Python3 file |
1145 self.__setClientType('Python3') # assume it is a Python3 file |
1122 self.startClient(False, forProject=forProject, |
1146 self.startClient(False, forProject=forProject, |
1123 runInConsole=runInConsole, venvName=venvName) |
1147 runInConsole=runInConsole, venvName=venvName, |
|
1148 configOverride=configOverride) |
1124 |
1149 |
1125 self.remoteEnvironment(env) |
1150 self.remoteEnvironment(env) |
1126 |
1151 |
1127 self.debuggerInterface.remoteCoverage(fn, argv, wd, erase) |
1152 self.debuggerInterface.remoteCoverage(fn, argv, wd, erase) |
1128 self.debugging = False |
1153 self.debugging = False |
1129 self.running = True |
1154 self.running = True |
1130 |
1155 |
1131 def remoteProfile(self, venvName, fn, argv, wd, env, |
1156 def remoteProfile(self, venvName, fn, argv, wd, env, |
1132 autoClearShell=True, erase=False, forProject=False, |
1157 autoClearShell=True, erase=False, forProject=False, |
1133 runInConsole=False, clientType=""): |
1158 runInConsole=False, clientType="", configOverride=None): |
1134 """ |
1159 """ |
1135 Public method to load a new program to collect profiling data. |
1160 Public method to load a new program to collect profiling data. |
1136 |
1161 |
1137 @param venvName name of the virtual environment to be used |
1162 @param venvName name of the virtual environment to be used |
1138 @type str |
1163 @type str |
1179 self.__setClientType( |
1207 self.__setClientType( |
1180 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
1208 self.__findLanguageForExtension(os.path.splitext(fn)[1])) |
1181 except KeyError: |
1209 except KeyError: |
1182 self.__setClientType('Python3') # assume it is a Python3 file |
1210 self.__setClientType('Python3') # assume it is a Python3 file |
1183 self.startClient(False, forProject=forProject, |
1211 self.startClient(False, forProject=forProject, |
1184 runInConsole=runInConsole, venvName=venvName) |
1212 runInConsole=runInConsole, venvName=venvName, |
|
1213 configOverride=configOverride) |
1185 |
1214 |
1186 self.remoteEnvironment(env) |
1215 self.remoteEnvironment(env) |
1187 |
1216 |
1188 self.debuggerInterface.remoteProfile(fn, argv, wd, erase) |
1217 self.debuggerInterface.remoteProfile(fn, argv, wd, erase) |
1189 self.debugging = False |
1218 self.debugging = False |