summaryrefslogtreecommitdiff
path: root/src/plugins/debugger
diff options
context:
space:
mode:
authorhjk <hjk@theqtcompany.com>2015-12-08 12:39:10 +0100
committerhjk <hjk@theqtcompany.com>2016-01-04 12:33:47 +0000
commit8e702387e5890cfb9258abfddd0e1e0a0e70fdb4 (patch)
tree91142193cb37a8e9b4fb6236d6c8813ea8b6838b /src/plugins/debugger
parent36b3e3c897721e6d56acb4081cc2f363e684de2e (diff)
downloadqt-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.cpp10
-rw-r--r--src/plugins/debugger/debuggerengine.cpp5
-rw-r--r--src/plugins/debugger/debuggerplugin.cpp4
-rw-r--r--src/plugins/debugger/debuggerruncontrol.cpp11
-rw-r--r--src/plugins/debugger/debuggersourcepathmappingwidget.cpp2
-rw-r--r--src/plugins/debugger/debuggerstartparameters.h6
-rw-r--r--src/plugins/debugger/gdb/attachgdbadapter.cpp1
-rw-r--r--src/plugins/debugger/gdb/gdbengine.cpp2
-rw-r--r--src/plugins/debugger/gdb/termgdbadapter.cpp2
-rw-r--r--src/plugins/debugger/lldb/lldbengine.cpp13
-rw-r--r--src/plugins/debugger/qml/qmlengine.cpp2
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