forked from qt-creator/qt-creator
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:
@@ -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_:
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user