--- a/eric6/Debugger/DebugUI.py Sun Mar 14 19:59:27 2021 +0100 +++ b/eric6/Debugger/DebugUI.py Mon Mar 15 17:55:48 2021 +0100 @@ -8,6 +8,7 @@ """ import os +import copy from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, Qt from PyQt5.QtGui import QKeySequence @@ -110,12 +111,12 @@ self.multiprocessNoDebugHistory = Preferences.toList( Preferences.Prefs.settings.value( 'DebugInfo/MultiprocessNoDebugHistory')) - self.overrideGlobalConfig = Preferences.toBool( - Preferences.Prefs.settings.value( - 'DebugInfo/OverrideGlobal', False)) - self.redirectStdinAndStdout = Preferences.toBool( - Preferences.Prefs.settings.value( - 'DebugInfo/RedirectStdinStdout', True)) + self.overrideGlobalConfig = { + "enable": Preferences.toBool(Preferences.Prefs.settings.value( + 'DebugInfo/OverrideGlobal', False)), + "redirect": Preferences.toBool(Preferences.Prefs.settings.value( + 'DebugInfo/RedirectStdinStdout', True)), + } self.lastDebuggedFile = None self.lastStartAction = 0 # 0=None, 1=Script, 2=Project @@ -1012,10 +1013,10 @@ self.multiprocessNoDebugHistory) Preferences.Prefs.settings.setValue( 'DebugInfo/OverrideGlobal', - self.overrideGlobalConfig) + self.overrideGlobalConfig["enable"]) Preferences.Prefs.settings.setValue( 'DebugInfo/RedirectStdinStdout', - self.redirectStdinAndStdout) + self.overrideGlobalConfig["redirect"]) def shutdownServer(self): """ @@ -1703,10 +1704,12 @@ dlg = StartDialog( cap, self.lastUsedVenvName, self.argvHistory, self.wdHistory, self.envHistory, self.exceptions, self.ui, 2, - autoClearShell=self.autoClearShell) + autoClearShell=self.autoClearShell, + configOverride=self.overrideGlobalConfig) if dlg.exec() == QDialog.DialogCode.Accepted: (lastUsedVenvName, argv, wd, env, exceptions, clearShell, console) = dlg.getData() + configOverride = dlg.getGlobalOverrideData() eraseCoverage = dlg.getCoverageData() if runProject: @@ -1729,7 +1732,8 @@ # save the info for later use self.project.setDbgInfo( lastUsedVenvName, argv, wd, env, exceptions, self.excList, - self.excIgnoreList, clearShell + self.excIgnoreList, clearShell, + configOverride=configOverride ) self.lastStartAction = 6 @@ -1775,6 +1779,9 @@ # Save the run in console flag self.runInConsole = console + # Save the global config override data + self.overrideGlobalConfig = copy.deepcopy(configOverride) + # Hide all error highlights self.viewmanager.unhighlight() @@ -1791,7 +1798,8 @@ lastUsedVenvName, fn, argv, wd, env, autoClearShell=self.autoClearShell, erase=eraseCoverage, forProject=runProject, runInConsole=console, - clientType=self.clientType) + clientType=self.clientType, + configOverride=self.overrideGlobalConfig) self.stopAct.setEnabled(True) @@ -1840,10 +1848,12 @@ dlg = StartDialog( cap, self.lastUsedVenvName, self.argvHistory, self.wdHistory, self.envHistory, self.exceptions, self.ui, 3, - autoClearShell=self.autoClearShell) + autoClearShell=self.autoClearShell, + configOverride=self.overrideGlobalConfig) if dlg.exec() == QDialog.DialogCode.Accepted: (lastUsedVenvName, argv, wd, env, exceptions, clearShell, console) = dlg.getData() + configOverride = dlg.getGlobalOverrideData() eraseTimings = dlg.getProfilingData() if runProject: @@ -1866,7 +1876,8 @@ # save the info for later use self.project.setDbgInfo( lastUsedVenvName, argv, wd, env, exceptions, self.excList, - self.excIgnoreList, clearShell + self.excIgnoreList, clearShell, + configOverride=configOverride ) self.lastStartAction = 8 @@ -1912,6 +1923,9 @@ # Save the run in console flag self.runInConsole = console + # Save the global config override data + self.overrideGlobalConfig = copy.deepcopy(configOverride) + # Hide all error highlights self.viewmanager.unhighlight() @@ -1928,7 +1942,8 @@ lastUsedVenvName, fn, argv, wd, env, autoClearShell=self.autoClearShell, erase=eraseTimings, forProject=runProject, runInConsole=console, - clientType=self.clientType) + clientType=self.clientType, + configOverride=self.overrideGlobalConfig) self.stopAct.setEnabled(True) @@ -1978,12 +1993,11 @@ cap, self.lastUsedVenvName, self.argvHistory, self.wdHistory, self.envHistory, self.exceptions, self.ui, 1, autoClearShell=self.autoClearShell, - enableConfigOverride=self.overrideGlobalConfig, - enableRedirect=self.redirectStdinAndStdout) + configOverride=self.overrideGlobalConfig) if dlg.exec() == QDialog.DialogCode.Accepted: (lastUsedVenvName, argv, wd, env, exceptions, clearShell, console) = dlg.getData() - enableConfigOverride, enableRedirect = dlg.getGlobalOverrideData() + configOverride = dlg.getGlobalOverrideData() if runProject: fn = self.project.getMainScript(True) @@ -2003,10 +2017,10 @@ doNotStart = True # save the info for later use - # TODO: add global config override data self.project.setDbgInfo( lastUsedVenvName, argv, wd, env, exceptions, self.excList, - self.excIgnoreList, clearShell + self.excIgnoreList, clearShell, + configOverride=configOverride ) self.lastStartAction = 4 @@ -2051,8 +2065,7 @@ self.runInConsole = console # Save the global config override data - self.overrideGlobalConfig = enableConfigOverride - self.redirectStdinAndStdout = enableRedirect + self.overrideGlobalConfig = copy.deepcopy(configOverride) # Hide all error highlights self.viewmanager.unhighlight() @@ -2066,11 +2079,11 @@ self.debugViewer.initCallStackViewer(runProject) # Ask the client to open the new program. - # TODO: add global config override data self.debugServer.remoteRun( lastUsedVenvName, fn, argv, wd, env, autoClearShell=self.autoClearShell, forProject=runProject, - runInConsole=console, clientType=self.clientType) + runInConsole=console, clientType=self.clientType, + configOverride=self.overrideGlobalConfig) self.stopAct.setEnabled(True) @@ -2122,10 +2135,12 @@ tracePython=self.tracePython, autoClearShell=self.autoClearShell, autoContinue=self.autoContinue, enableMultiprocess=self.enableMultiprocess, - multiprocessNoDebugHistory=self.multiprocessNoDebugHistory) + multiprocessNoDebugHistory=self.multiprocessNoDebugHistory, + configOverride=self.overrideGlobalConfig) if dlg.exec() == QDialog.DialogCode.Accepted: (lastUsedVenvName, argv, wd, env, exceptions, clearShell, console) = dlg.getData() + configOverride = dlg.getGlobalOverrideData() (tracePython, autoContinue, enableMultiprocess, multiprocessNoDebug) = dlg.getDebugData() @@ -2152,7 +2167,8 @@ self.excIgnoreList, clearShell, tracePython=tracePython, autoContinue=autoContinue, enableMultiprocess=enableMultiprocess, - multiprocessNoDebug=multiprocessNoDebug + multiprocessNoDebug=multiprocessNoDebug, + configOverride=configOverride ) self.lastStartAction = 2 @@ -2205,6 +2221,9 @@ self.enableMultiprocess = enableMultiprocess self.setMultiprocessNoDebugHistory(multiprocessNoDebug) + # Save the global config override data + self.overrideGlobalConfig = copy.deepcopy(configOverride) + # Hide all error highlights self.viewmanager.unhighlight() @@ -2231,7 +2250,8 @@ runInConsole=console, clientType=self.clientType, enableCallTrace=enableCallTrace, enableMultiprocess=enableMultiprocess, - multiprocessNoDebug=multiprocessNoDebug) + multiprocessNoDebug=multiprocessNoDebug, + configOverride=self.overrideGlobalConfig) if ( self.debugServer.isClientProcessUp() and @@ -2320,7 +2340,8 @@ clientType=self.clientType, enableCallTrace=enableCallTrace, enableMultiprocess=self.enableMultiprocess, - multiprocessNoDebug=multiprocessNoDebug) + multiprocessNoDebug=multiprocessNoDebug, + configOverride=self.overrideGlobalConfig) # Signal that we have started a debugging session self.debuggingStarted.emit(fn) @@ -2332,7 +2353,8 @@ autoClearShell=self.autoClearShell, forProject=forProject, runInConsole=self.runInConsole, - clientType=self.clientType) + clientType=self.clientType, + configOverride=self.overrideGlobalConfig) elif self.lastStartAction in [5, 6]: # Ask the client to coverage run the new program. @@ -2342,7 +2364,8 @@ erase=self.eraseCoverage, forProject=forProject, runInConsole=self.runInConsole, - clientType=self.clientType) + clientType=self.clientType, + configOverride=self.overrideGlobalConfig) elif self.lastStartAction in [7, 8]: # Ask the client to profile run the new program. @@ -2352,7 +2375,8 @@ erase=self.eraseTimings, forProject=forProject, runInConsole=self.runInConsole, - clientType=self.clientType) + clientType=self.clientType, + configOverride=self.overrideGlobalConfig) self.stopAct.setEnabled(True) @@ -2589,14 +2613,13 @@ """ self.enableMultiprocess = enableMultiprocess - def setEnableGlobalConfigOverride(self, override, redirect): + def setEnableGlobalConfigOverride(self, overrideData): """ Public method to initialize the global config override data. - @param override flag indicating to enable global config override - @type bool - @param redirect flag indicating to redirect stdin/stdout/stderr - @type bool + @param overrideData dictionary containing a flag indicating to enable + global config override and a flag indicating to redirect + stdin/stdout/stderr + @type dict """ - self.overrideGlobalConfig = override - self.redirectStdinAndStdout = redirect + self.overrideGlobalConfig = copy.deepcopy(overrideData)