diff options
author | hjk <hjk@theqtcompany.com> | 2015-12-08 12:39:10 +0100 |
---|---|---|
committer | hjk <hjk@theqtcompany.com> | 2016-01-04 12:33:47 +0000 |
commit | 8e702387e5890cfb9258abfddd0e1e0a0e70fdb4 (patch) | |
tree | 91142193cb37a8e9b4fb6236d6c8813ea8b6838b /src/plugins/debugger | |
parent | 36b3e3c897721e6d56acb4081cc2f363e684de2e (diff) | |
download | qt-creator-8e702387e5890cfb9258abfddd0e1e0a0e70fdb4.tar.gz |
Debugger: Start separating different process environments
Debugger and stub run locally, the debugged process not necessarily.
Change-Id: Ibf6aec3dcaec60069866ec0765ec2178ca0a26d6
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
Diffstat (limited to 'src/plugins/debugger')
-rw-r--r-- | src/plugins/debugger/cdb/cdbengine.cpp | 10 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerengine.cpp | 5 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerplugin.cpp | 4 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerruncontrol.cpp | 11 | ||||
-rw-r--r-- | src/plugins/debugger/debuggersourcepathmappingwidget.cpp | 2 | ||||
-rw-r--r-- | src/plugins/debugger/debuggerstartparameters.h | 6 | ||||
-rw-r--r-- | src/plugins/debugger/gdb/attachgdbadapter.cpp | 1 | ||||
-rw-r--r-- | src/plugins/debugger/gdb/gdbengine.cpp | 2 | ||||
-rw-r--r-- | src/plugins/debugger/gdb/termgdbadapter.cpp | 2 | ||||
-rw-r--r-- | src/plugins/debugger/lldb/lldbengine.cpp | 13 | ||||
-rw-r--r-- | src/plugins/debugger/qml/qmlengine.cpp | 2 |
11 files changed, 33 insertions, 25 deletions
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 5d1a4b71d3..0db3705d9b 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -424,8 +424,8 @@ bool CdbEngine::startConsole(const DebuggerRunParameters &sp, QString *errorMess connect(m_consoleStub.data(), &ConsoleProcess::stubStopped, this, &CdbEngine::consoleStubExited); m_consoleStub->setWorkingDirectory(sp.workingDirectory); - if (sp.environment.size()) - m_consoleStub->setEnvironment(sp.environment); + if (sp.stubEnvironment.size()) + m_consoleStub->setEnvironment(sp.stubEnvironment); if (!m_consoleStub->start(sp.executable, sp.processArgs)) { *errorMessage = tr("The console process \"%1\" could not be started.").arg(sp.executable); return false; @@ -620,10 +620,10 @@ bool CdbEngine::launchCDB(const DebuggerRunParameters &sp, QString *errorMessage m_outputBuffer.clear(); m_autoBreakPointCorrection = false; - const QStringList environment = sp.environment.size() == 0 ? + const QStringList inferiorEnvironment = sp.inferiorEnvironment.size() == 0 ? QProcessEnvironment::systemEnvironment().toStringList() : - sp.environment.toStringList(); - m_process.setEnvironment(mergeEnvironment(environment, extensionFi.absolutePath())); + sp.inferiorEnvironment.toStringList(); + m_process.setEnvironment(mergeEnvironment(inferiorEnvironment, extensionFi.absolutePath())); if (!sp.workingDirectory.isEmpty()) m_process.setWorkingDirectory(sp.workingDirectory); diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 5fdfc0da3e..10e673fd7c 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -109,7 +109,8 @@ QDebug operator<<(QDebug str, const DebuggerRunParameters &sp) nospace << "executable=" << sp.executable << " coreFile=" << sp.coreFile << " processArgs=" << sp.processArgs - << " environment=<" << sp.environment.size() << " variables>" + << " inferior environment=<" << sp.inferiorEnvironment.size() << " variables>" + << " debugger environment=<" << sp.debuggerEnvironment.size() << " variables>" << " workingDir=" << sp.workingDirectory << " attachPID=" << sp.attachPID << " useTerminal=" << sp.useTerminal @@ -566,7 +567,7 @@ void DebuggerEngine::startDebugger(DebuggerRunControl *runControl) d->m_runControl->setApplicationProcessHandle(ProcessHandle(d->m_inferiorPid)); if (isNativeMixedActive()) - d->m_runParameters.environment.set(QLatin1String("QV4_FORCE_INTERPRETER"), QLatin1String("1")); + d->m_runParameters.inferiorEnvironment.set(QLatin1String("QV4_FORCE_INTERPRETER"), QLatin1String("1")); action(OperateByInstruction)->setEnabled(hasCapability(DisassemblerCapability)); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index b7d01482ce..0f5732e715 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1173,7 +1173,9 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it, rp.displayName = tr("Executable file \"%1\"").arg(rp.executable); rp.startMessage = tr("Debugging file %1.").arg(rp.executable); } - rp.environment = Utils::Environment::systemEnvironment(); + rp.inferiorEnvironment = Utils::Environment::systemEnvironment(); + rp.stubEnvironment = Utils::Environment::systemEnvironment(); + rp.debuggerEnvironment = Utils::Environment::systemEnvironment(); m_scheduledStarts.append(QPair<DebuggerRunParameters, Kit *>(rp, kit)); return true; } diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index e2a4a561b6..6f0c74bcb5 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -404,8 +404,11 @@ void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const } if (m_runConfig) { - if (auto envAspect = m_runConfig->extraAspect<EnvironmentAspect>()) - m_rp.environment = envAspect->environment(); + if (auto envAspect = m_runConfig->extraAspect<EnvironmentAspect>()) { + m_rp.inferiorEnvironment = envAspect->environment(); // Correct. + m_rp.stubEnvironment = m_rp.inferiorEnvironment; // FIXME: Wrong, but contains DYLD_IMAGE_SUFFIX + m_rp.debuggerEnvironment = m_rp.inferiorEnvironment; // FIXME: Wrong, but contains DYLD_IMAGE_SUFFIX + } } if (ToolChain *tc = ToolChainKitInformation::toolChain(m_kit)) @@ -497,8 +500,8 @@ void DebuggerRunControlCreator::enrich(const RunConfiguration *runConfig, const // Makes sure that all bindings go through the JavaScript engine, so that // breakpoints are actually hit! const QString optimizerKey = _("QML_DISABLE_OPTIMIZER"); - if (!m_rp.environment.hasKey(optimizerKey)) - m_rp.environment.set(optimizerKey, _("1")); + if (!m_rp.inferiorEnvironment.hasKey(optimizerKey)) + m_rp.inferiorEnvironment.set(optimizerKey, _("1")); } } } diff --git a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp index a596e6b1e2..0a2caccfea 100644 --- a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp +++ b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp @@ -440,7 +440,7 @@ DebuggerSourcePathMappingWidget::SourcePathMap DebuggerSourcePathMappingWidget::mergePlatformQtPath(const DebuggerRunParameters &sp, const SourcePathMap &in) { - const FileName qmake = BuildableHelperLibrary::findSystemQt(sp.environment); + const FileName qmake = BuildableHelperLibrary::findSystemQt(sp.inferiorEnvironment); // FIXME: Get this from the profile? // We could query the QtVersion for this information directly, but then we // will need to add a dependency on QtSupport to the debugger. diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h index d81b797053..5a3d84dc8d 100644 --- a/src/plugins/debugger/debuggerstartparameters.h +++ b/src/plugins/debugger/debuggerstartparameters.h @@ -73,7 +73,9 @@ public: QString executable; QString displayName; // Used in the Snapshots view. QString processArgs; - Utils::Environment environment; + Utils::Environment inferiorEnvironment; + Utils::Environment debuggerEnvironment; + Utils::Environment stubEnvironment; QString workingDirectory; qint64 attachPID = InvalidPid; QStringList solibSearchPath; @@ -81,7 +83,7 @@ public: // Used by Qml debugging. QString qmlServerAddress; - quint16 qmlServerPort; + quint16 qmlServerPort = InvalidPort; // Used by general remote debugging. QString remoteChannel; diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp index 56ac21f3bc..564a8c4a17 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.cpp +++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp @@ -59,6 +59,7 @@ void GdbAttachEngine::setupEngine() if (!runParameters().workingDirectory.isEmpty()) m_gdbProc.setWorkingDirectory(runParameters().workingDirectory); + m_gdbProc.setEnvironment(runParameters().debuggerEnvironment); startGdb(); } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index a9d9a5f1f2..03d903741b 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4193,7 +4193,7 @@ void GdbEngine::loadInitScript() void GdbEngine::setEnvironmentVariables() { Environment sysEnv = Environment::systemEnvironment(); - Environment runEnv = runParameters().environment; + Environment runEnv = runParameters().inferiorEnvironment; foreach (const EnvironmentItem &item, sysEnv.diff(runEnv)) { if (item.unset) runCommand({"unset environment " + item.name.toUtf8(), NoFlags}); diff --git a/src/plugins/debugger/gdb/termgdbadapter.cpp b/src/plugins/debugger/gdb/termgdbadapter.cpp index f50388ee0e..e2dc2099ab 100644 --- a/src/plugins/debugger/gdb/termgdbadapter.cpp +++ b/src/plugins/debugger/gdb/termgdbadapter.cpp @@ -88,7 +88,7 @@ void GdbTermEngine::setupEngine() m_stubProc.setWorkingDirectory(runParameters().workingDirectory); // Set environment + dumper preload. - m_stubProc.setEnvironment(runParameters().environment); + m_stubProc.setEnvironment(runParameters().stubEnvironment); connect(&m_stubProc, &ConsoleProcess::processError, this, &GdbTermEngine::stubError); diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index cfd95bade2..e807e34d7c 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -214,7 +214,7 @@ void LldbEngine::setupEngine() m_stubProc.setWorkingDirectory(runParameters().workingDirectory); // Set environment + dumper preload. - m_stubProc.setEnvironment(runParameters().environment); + m_stubProc.setEnvironment(runParameters().stubEnvironment); connect(&m_stubProc, &ConsoleProcess::processError, this, &LldbEngine::stubError); connect(&m_stubProc, &ConsoleProcess::processStarted, this, &LldbEngine::stubStarted); @@ -255,7 +255,7 @@ void LldbEngine::startLldb() this, &LldbEngine::handleResponse, Qt::QueuedConnection); showMessage(_("STARTING LLDB: ") + m_lldbCmd); - m_lldbProc.setEnvironment(runParameters().environment); + m_lldbProc.setEnvironment(runParameters().debuggerEnvironment); if (!runParameters().workingDirectory.isEmpty()) m_lldbProc.setWorkingDirectory(runParameters().workingDirectory); @@ -293,7 +293,7 @@ void LldbEngine::startLldbStage2() void LldbEngine::setupInferior() { Environment sysEnv = Environment::systemEnvironment(); - Environment runEnv = runParameters().environment; + Environment runEnv = runParameters().inferiorEnvironment; foreach (const EnvironmentItem &item, sysEnv.diff(runEnv)) { DebuggerCommand cmd("executeDebuggerCommand"); if (item.unset) @@ -337,10 +337,9 @@ void LldbEngine::setupInferior() cmd2.arg("startmode", rp.startMode); cmd2.arg("nativemixed", isNativeMixedActive()); - // FIXME: separate Inferior and Debugger environments properly - cmd2.arg("dyldimagesuffix", rp.environment.value(_("DYLD_IMAGE_SUFFIX"))); - cmd2.arg("dyldframeworkpath", rp.environment.value(_("DYLD_LIBRARY_PATH"))); - cmd2.arg("dyldlibrarypath", rp.environment.value(_("DYLD_FRAMEWORK_PATH"))); + cmd2.arg("dyldimagesuffix", rp.inferiorEnvironment.value(_("DYLD_IMAGE_SUFFIX"))); + cmd2.arg("dyldframeworkpath", rp.inferiorEnvironment.value(_("DYLD_LIBRARY_PATH"))); + cmd2.arg("dyldlibrarypath", rp.inferiorEnvironment.value(_("DYLD_FRAMEWORK_PATH"))); QJsonArray processArgs; foreach (const QString &arg, args.toUnixArgs()) diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 26dd8cee34..4804da4b1d 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -639,7 +639,7 @@ void QmlEngine::setupEngine() // we need to get the port first notifyEngineRequestRemoteSetup(); } else { - d->applicationLauncher.setEnvironment(runParameters().environment); + d->applicationLauncher.setEnvironment(runParameters().inferiorEnvironment); d->applicationLauncher.setWorkingDirectory(runParameters().workingDirectory); // We can't do this in the constructore because runControl() isn't yet defined |