Debugger: Fix LLDB start with complex command lines

Fixes: QTCREATORBUG-21433
Change-Id: I1a248272566eac7f5fd07a8346500d245b62fbfa
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2018-11-07 12:31:30 +01:00
parent 0a29e12d0c
commit c016c6737b
2 changed files with 16 additions and 10 deletions

View File

@@ -830,8 +830,7 @@ class Dumper(DumperBase):
self.startMode_ = args.get('startmode', 1) self.startMode_ = args.get('startmode', 1)
self.breakOnMain_ = args.get('breakonmain', 0) self.breakOnMain_ = args.get('breakonmain', 0)
self.useTerminal_ = args.get('useterminal', 0) self.useTerminal_ = args.get('useterminal', 0)
self.processArgs_ = args.get('processargs', []) self.processArgs_ = self.hexdecode(args.get('processargs'))
self.processArgs_ = list(map(lambda x: self.hexdecode(x), self.processArgs_))
self.environment_ = args.get('environment', []) self.environment_ = args.get('environment', [])
self.environment_ = list(map(lambda x: self.hexdecode(x), self.environment_)) self.environment_ = list(map(lambda x: self.hexdecode(x), self.environment_))
self.attachPid_ = args.get('attachpid', 0) self.attachPid_ = args.get('attachpid', 0)
@@ -928,7 +927,19 @@ class Dumper(DumperBase):
else: else:
self.reportState('enginerunfailed') self.reportState('enginerunfailed')
else: 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.SetWorkingDirectory(self.workingDirectory_)
launchInfo.SetEnvironmentEntries(self.environment_, False) launchInfo.SetEnvironmentEntries(self.environment_, False)
if self.breakOnMain_: if self.breakOnMain_:

View File

@@ -253,20 +253,15 @@ void LldbEngine::setupEngine()
const DebuggerRunParameters &rp = runParameters(); const DebuggerRunParameters &rp = runParameters();
QString executable;
QtcProcess::Arguments args;
QtcProcess::prepareCommand(QFileInfo(rp.inferior.executable).absoluteFilePath(),
rp.inferior.commandLineArguments, &executable, &args);
DebuggerCommand cmd2("setupInferior"); DebuggerCommand cmd2("setupInferior");
cmd2.arg("executable", executable); cmd2.arg("executable", rp.inferior.executable);
cmd2.arg("breakonmain", rp.breakOnMain); cmd2.arg("breakonmain", rp.breakOnMain);
cmd2.arg("useterminal", bool(terminal())); cmd2.arg("useterminal", bool(terminal()));
cmd2.arg("startmode", rp.startMode); cmd2.arg("startmode", rp.startMode);
cmd2.arg("nativemixed", isNativeMixedActive()); cmd2.arg("nativemixed", isNativeMixedActive());
cmd2.arg("workingdirectory", rp.inferior.workingDirectory); cmd2.arg("workingdirectory", rp.inferior.workingDirectory);
cmd2.arg("environment", rp.inferior.environment.toStringList()); cmd2.arg("environment", rp.inferior.environment.toStringList());
cmd2.arg("processargs", args.toUnixArgs()); cmd2.arg("processargs", toHex(rp.inferior.commandLineArguments));
if (terminal()) { if (terminal()) {
const qint64 attachedPID = terminal()->applicationPid(); const qint64 attachedPID = terminal()->applicationPid();