From c016c6737b4d9392d9df4f2f0b5c10b4511c4ed0 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 7 Nov 2018 12:31:30 +0100 Subject: [PATCH] Debugger: Fix LLDB start with complex command lines Fixes: QTCREATORBUG-21433 Change-Id: I1a248272566eac7f5fd07a8346500d245b62fbfa Reviewed-by: Christian Stenger --- share/qtcreator/debugger/lldbbridge.py | 17 ++++++++++++++--- src/plugins/debugger/lldb/lldbengine.cpp | 9 ++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index a6d844a2b4d..70a682a1a9d 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -830,8 +830,7 @@ class Dumper(DumperBase): self.startMode_ = args.get('startmode', 1) self.breakOnMain_ = args.get('breakonmain', 0) self.useTerminal_ = args.get('useterminal', 0) - self.processArgs_ = args.get('processargs', []) - self.processArgs_ = list(map(lambda x: self.hexdecode(x), self.processArgs_)) + self.processArgs_ = self.hexdecode(args.get('processargs')) self.environment_ = args.get('environment', []) self.environment_ = list(map(lambda x: self.hexdecode(x), self.environment_)) self.attachPid_ = args.get('attachpid', 0) @@ -928,7 +927,19 @@ class Dumper(DumperBase): else: self.reportState('enginerunfailed') else: - launchInfo = lldb.SBLaunchInfo(self.processArgs_) + # This does not seem to work on Linux nor macOS? + #launchInfo = lldb.SBLaunchInfo([self.processArgs_]) + #launchInfo.SetShellExpandArguments(True) + args = [] + try: + import subprocess + cmd = 'for x in {} ; do printf "%s\n" "$x" ; done' \ + .format(self.processArgs_) + args = subprocess.check_output(cmd, shell=True, cwd=self.workingDirectory_).split() + except: + # Wrong, but... + args = self.processArgs_ + launchInfo = lldb.SBLaunchInfo(args) launchInfo.SetWorkingDirectory(self.workingDirectory_) launchInfo.SetEnvironmentEntries(self.environment_, False) if self.breakOnMain_: diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index c73c04b2bab..124e001b7d0 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -253,20 +253,15 @@ void LldbEngine::setupEngine() const DebuggerRunParameters &rp = runParameters(); - QString executable; - QtcProcess::Arguments args; - QtcProcess::prepareCommand(QFileInfo(rp.inferior.executable).absoluteFilePath(), - rp.inferior.commandLineArguments, &executable, &args); - DebuggerCommand cmd2("setupInferior"); - cmd2.arg("executable", executable); + cmd2.arg("executable", rp.inferior.executable); cmd2.arg("breakonmain", rp.breakOnMain); cmd2.arg("useterminal", bool(terminal())); cmd2.arg("startmode", rp.startMode); cmd2.arg("nativemixed", isNativeMixedActive()); cmd2.arg("workingdirectory", rp.inferior.workingDirectory); cmd2.arg("environment", rp.inferior.environment.toStringList()); - cmd2.arg("processargs", args.toUnixArgs()); + cmd2.arg("processargs", toHex(rp.inferior.commandLineArguments)); if (terminal()) { const qint64 attachedPID = terminal()->applicationPid();