From 0f46ad4a552439a4b137bc8cab2d6c41edb5cbc0 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Wed, 15 Jul 2015 10:38:15 +0300 Subject: [PATCH] Debugger: Set debuggee environment vars. Env vars should be set to debuggee not to debugger. Change-Id: I1ff877e295cb61f3a47c3aec5ffb43dea64df1cc Reviewed-by: hjk --- src/plugins/debugger/gdb/attachgdbadapter.cpp | 2 -- src/plugins/debugger/gdb/gdbengine.cpp | 10 +++++++++- src/plugins/debugger/gdb/gdbengine.h | 1 + src/plugins/debugger/gdb/gdbplainengine.cpp | 4 +--- src/plugins/debugger/gdb/remotegdbserveradapter.cpp | 4 ++-- src/plugins/debugger/lldb/lldbengine.cpp | 7 ++++++- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/plugins/debugger/gdb/attachgdbadapter.cpp b/src/plugins/debugger/gdb/attachgdbadapter.cpp index 87f16d648af..c089e8f91c2 100644 --- a/src/plugins/debugger/gdb/attachgdbadapter.cpp +++ b/src/plugins/debugger/gdb/attachgdbadapter.cpp @@ -59,8 +59,6 @@ void GdbAttachEngine::setupEngine() if (!runParameters().workingDirectory.isEmpty()) m_gdbProc.setWorkingDirectory(runParameters().workingDirectory); - if (runParameters().environment.size()) - m_gdbProc.setEnvironment(runParameters().environment); startGdb(); } diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index e6924371fd7..16a2300247c 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4260,6 +4260,14 @@ void GdbEngine::loadInitScript() } } +void GdbEngine::setEnvironmentVariables() +{ + if (runParameters().environment.size()) { + foreach (const QString &env, runParameters().environment.toStringList()) + postCommand("-gdb-set environment " + env.toUtf8()); + } +} + void GdbEngine::reloadDebuggingHelpers() { runCommand("reloadDumpers"); @@ -4570,7 +4578,7 @@ bool GdbEngine::prepareCommand() QtcProcess::SplitError perr; rp.processArgs = QtcProcess::prepareArgs(rp.processArgs, &perr, HostOsInfo::hostOs(), - &rp.environment, &rp.workingDirectory).toWindowsArgs(); + nullptr, &rp.workingDirectory).toWindowsArgs(); if (perr != QtcProcess::SplitOk) { // perr == BadQuoting is never returned on Windows // FIXME? QTCREATORBUG-2809 diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index b06cd67bcdc..d994a1cbbdd 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -103,6 +103,7 @@ protected: ////////// Gdb Process Management ////////// void handleGdbExit(const DebuggerResponse &response); void loadInitScript(); + void setEnvironmentVariables(); // Something went wrong with the adapter *before* adapterStarted() was emitted. // Make sure to clean up everything before emitting this signal. diff --git a/src/plugins/debugger/gdb/gdbplainengine.cpp b/src/plugins/debugger/gdb/gdbplainengine.cpp index 1980f9c32b5..b49bb315475 100644 --- a/src/plugins/debugger/gdb/gdbplainengine.cpp +++ b/src/plugins/debugger/gdb/gdbplainengine.cpp @@ -57,6 +57,7 @@ GdbPlainEngine::GdbPlainEngine(const DebuggerRunParameters &startParameters) void GdbPlainEngine::setupInferior() { QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state()); + setEnvironmentVariables(); if (!runParameters().processArgs.isEmpty()) { QString args = runParameters().processArgs; postCommand("-exec-arguments " + toLocalEncoding(args)); @@ -127,9 +128,6 @@ void GdbPlainEngine::setupEngine() if (!runParameters().workingDirectory.isEmpty()) m_gdbProc.setWorkingDirectory(runParameters().workingDirectory); - Utils::Environment env = runParameters().environment; - if (env.size()) - m_gdbProc.setEnvironment(env); startGdb(gdbArgs); } diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp index 617f087791c..95f99d136a1 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp @@ -91,8 +91,6 @@ void GdbRemoteServerEngine::setupEngine() } if (!runParameters().workingDirectory.isEmpty()) m_gdbProc.setWorkingDirectory(runParameters().workingDirectory); - if (runParameters().environment.size()) - m_gdbProc.setEnvironment(runParameters().environment); if (runParameters().remoteSetupNeeded) notifyEngineRequestRemoteSetup(); @@ -186,6 +184,8 @@ void GdbRemoteServerEngine::setupInferior() if (!args.isEmpty()) postCommand("-exec-arguments " + args.toLocal8Bit()); + setEnvironmentVariables(); + // This has to be issued before 'target remote'. On pre-7.0 the // command is not present and will result in ' No symbol table is // loaded. Use the "file" command.' as gdb tries to set the diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 47037761924..753a483199f 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -182,7 +182,7 @@ bool LldbEngine::prepareCommand() QtcProcess::SplitError perr; rp.processArgs = QtcProcess::prepareArgs(rp.processArgs, &perr, HostOsInfo::hostOs(), - &rp.environment, &rp.workingDirectory).toWindowsArgs(); + nullptr, &rp.workingDirectory).toWindowsArgs(); if (perr != QtcProcess::SplitOk) { // perr == BadQuoting is never returned on Windows // FIXME? QTCREATORBUG-2809 @@ -290,6 +290,11 @@ void LldbEngine::startLldbStage2() void LldbEngine::setupInferior() { + if (runParameters().environment.size()) { + foreach (const QString &env, runParameters().environment.toStringList()) + runCommand("env " + env.toUtf8()); + } + const QString path = stringSetting(ExtraDumperFile); if (!path.isEmpty() && QFileInfo(path).isReadable()) { DebuggerCommand cmd("addDumperModule");