Debugger: Centralize some parameter sanitization

Change-Id: I00e7c22adcf32ba8251b357e75eb9207b6f98f1b
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2017-09-05 15:32:25 +02:00
parent dce0b1c945
commit a512c8e0c8
7 changed files with 15 additions and 38 deletions

View File

@@ -455,9 +455,6 @@ void CdbEngine::setupEngine()
if (debug) if (debug)
qDebug(">setupEngine"); qDebug(">setupEngine");
if (!prepareCommand())
return;
init(); init();
if (!m_logTime.elapsed()) if (!m_logTime.elapsed())
m_logTime.start(); m_logTime.start();

View File

@@ -1239,30 +1239,6 @@ QString DebuggerEngine::nativeStartupCommands() const
runParameters().additionalStartupCommands}).join('\n')); runParameters().additionalStartupCommands}).join('\n'));
} }
bool DebuggerEngine::prepareCommand()
{
if (HostOsInfo::isWindowsHost()) {
DebuggerRunParameters &rp = runParameters();
QtcProcess::SplitError perr;
rp.inferior.commandLineArguments =
QtcProcess::prepareArgs(rp.inferior.commandLineArguments, &perr,
HostOsInfo::hostOs(), nullptr,
&rp.inferior.workingDirectory).toWindowsArgs();
if (perr != QtcProcess::SplitOk) {
// perr == BadQuoting is never returned on Windows
// FIXME? QTCREATORBUG-2809
showMessage("ADAPTER START FAILED");
const QString title = tr("Adapter start failed");
const QString msg = tr("Debugging complex command lines "
"is currently not supported on Windows.");
ICore::showWarningWithOptions(title, msg);
notifyEngineSetupFailed();
return false;
}
}
return true;
}
void DebuggerEngine::updateBreakpointMarker(const Breakpoint &bp) void DebuggerEngine::updateBreakpointMarker(const Breakpoint &bp)
{ {
d->m_disassemblerAgent.updateBreakpointMarker(bp); d->m_disassemblerAgent.updateBreakpointMarker(bp);

View File

@@ -336,8 +336,6 @@ public:
QString expand(const QString &string) const; QString expand(const QString &string) const;
QString nativeStartupCommands() const; QString nativeStartupCommands() const;
bool prepareCommand();
protected: protected:
// The base notify*() function implementation should be sufficient // The base notify*() function implementation should be sufficient
// in most cases, but engines are free to override them to do some // in most cases, but engines are free to override them to do some

View File

@@ -693,6 +693,21 @@ static bool fixupParameters(DebuggerRunParameters &rp, RunControl *runControl, Q
breakOnMainNextTime = false; breakOnMainNextTime = false;
} }
if (HostOsInfo::isWindowsHost()) {
QtcProcess::SplitError perr;
rp.inferior.commandLineArguments =
QtcProcess::prepareArgs(rp.inferior.commandLineArguments, &perr,
HostOsInfo::hostOs(), nullptr,
&rp.inferior.workingDirectory).toWindowsArgs();
if (perr != QtcProcess::SplitOk) {
// perr == BadQuoting is never returned on Windows
// FIXME? QTCREATORBUG-2809
m_errors.append(DebuggerPlugin::tr("Debugging complex command lines "
"is currently not supported on Windows."));
return false;
}
}
return true; return true;
} }

View File

@@ -112,9 +112,6 @@ void GdbPlainEngine::setupEngine()
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
showMessage("TRYING TO START ADAPTER"); showMessage("TRYING TO START ADAPTER");
if (!prepareCommand())
return;
QStringList gdbArgs; QStringList gdbArgs;
if (!m_outputCollector.listen()) { if (!m_outputCollector.listen()) {

View File

@@ -77,9 +77,6 @@ void GdbTermEngine::setupEngine()
// m_stubProc.stop(); // m_stubProc.stop();
// m_stubProc.blockSignals(false); // m_stubProc.blockSignals(false);
if (!prepareCommand())
return;
m_stubProc.setWorkingDirectory(runParameters().inferior.workingDirectory); m_stubProc.setWorkingDirectory(runParameters().inferior.workingDirectory);
// Set environment + dumper preload. // Set environment + dumper preload.
m_stubProc.setEnvironment(runParameters().stubEnvironment); m_stubProc.setEnvironment(runParameters().stubEnvironment);

View File

@@ -205,9 +205,6 @@ void LldbEngine::setupEngine()
// m_stubProc.stop(); // m_stubProc.stop();
// m_stubProc.blockSignals(false); // m_stubProc.blockSignals(false);
if (!prepareCommand())
return;
m_stubProc.setWorkingDirectory(runParameters().inferior.workingDirectory); m_stubProc.setWorkingDirectory(runParameters().inferior.workingDirectory);
// Set environment + dumper preload. // Set environment + dumper preload.
m_stubProc.setEnvironment(runParameters().stubEnvironment); m_stubProc.setEnvironment(runParameters().stubEnvironment);