diff options
| author | hjk <[email protected]> | 2017-09-27 08:22:02 +0200 |
|---|---|---|
| committer | hjk <[email protected]> | 2017-09-27 12:16:19 +0000 |
| commit | 895acd23e33408dd967519f1e3a277b0ac28387b (patch) | |
| tree | 9763d50e97d50bbf6f12d0a6231786a0208c31db /src/plugins/debugger/debuggerruncontrol.cpp | |
| parent | 6f481bd9da32b79fc0aa361c30406b2f4a6af918 (diff) | |
Debugger: Move external terminal into separate RunWorker
Change-Id: Ifb9701f840195ba90db48a0f6fa07b28e0409648
Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/plugins/debugger/debuggerruncontrol.cpp')
| -rw-r--r-- | src/plugins/debugger/debuggerruncontrol.cpp | 68 |
1 files changed, 39 insertions, 29 deletions
diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index e6832afe9aa..1ab8198fcd1 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include "debuggerruncontrol.h" +#include "terminal.h" #include "analyzer/analyzermanager.h" #include "console/console.h" @@ -76,7 +77,7 @@ namespace Debugger { namespace Internal { DebuggerEngine *createCdbEngine(QStringList *error, DebuggerStartMode sm); -DebuggerEngine *createGdbEngine(bool useTerminal, DebuggerStartMode sm); +DebuggerEngine *createGdbEngine(DebuggerStartMode sm); DebuggerEngine *createPdbEngine(); DebuggerEngine *createQmlEngine(bool useTerminal); DebuggerEngine *createQmlCppEngine(DebuggerEngine *cppEngine, bool useTerminal); @@ -173,8 +174,13 @@ public: Utils::QtcProcess m_proc; }; -} // namespace Internal +class DebuggerRunToolPrivate +{ +public: + QPointer<TerminalRunner> terminalRunner; +}; +} // namespace Internal static bool breakOnMainNextTime = false; @@ -284,7 +290,13 @@ void DebuggerRunTool::setBreakOnMain(bool on) void DebuggerRunTool::setUseTerminal(bool on) { - m_runParameters.useTerminal = on; + if (on && !d->terminalRunner && m_runParameters.cppEngineType == GdbEngineType) { + d->terminalRunner = new TerminalRunner(this); + addStartDependency(d->terminalRunner); + } + if (!on && d->terminalRunner) { + QTC_CHECK(false); // User code can only switch from no terminal to one terminal. + } } void DebuggerRunTool::setCommandsAfterConnect(const QString &commands) @@ -343,6 +355,7 @@ void DebuggerRunTool::setInferior(const Runnable &runnable) { QTC_ASSERT(runnable.is<StandardRunnable>(), reportFailure(); return); m_runParameters.inferior = runnable.as<StandardRunnable>(); + setUseTerminal(m_runParameters.inferior.runMode == ApplicationLauncher::Console); } void DebuggerRunTool::setInferiorExecutable(const QString &executable) @@ -469,7 +482,7 @@ void DebuggerRunTool::start() switch (m_runParameters.cppEngineType) { case GdbEngineType: - cppEngine = createGdbEngine(m_runParameters.useTerminal, m_runParameters.startMode); + cppEngine = createGdbEngine(m_runParameters.startMode); break; case CdbEngineType: { QStringList errors; @@ -493,11 +506,11 @@ void DebuggerRunTool::start() switch (m_runParameters.masterEngineType) { case QmlEngineType: - m_engine = createQmlEngine(m_runParameters.useTerminal); + m_engine = createQmlEngine(terminalRunner() != nullptr); break; case QmlCppEngineType: if (cppEngine) - m_engine = createQmlCppEngine(cppEngine, m_runParameters.useTerminal); + m_engine = createQmlCppEngine(cppEngine, terminalRunner() != nullptr); break; default: m_engine = cppEngine; @@ -710,14 +723,6 @@ bool DebuggerRunTool::fixupParameters() } } - // FIXME: We can't handle terminals yet. - if (rp.useTerminal && rp.cppEngineType == LldbEngineType) { - qWarning("Run in Terminal is not supported yet with the LLDB backend"); - appendMessage(DebuggerPlugin::tr("Run in Terminal is not supported with the LLDB backend."), - ErrorMessageFormat); - rp.useTerminal = false; - } - if (rp.isNativeMixedDebugging()) rp.inferior.environment.set("QV4_FORCE_INTERPRETER", "1"); @@ -727,8 +732,13 @@ bool DebuggerRunTool::fixupParameters() return true; } +Internal::TerminalRunner *DebuggerRunTool::terminalRunner() const +{ + return d->terminalRunner; +} + DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit) - : RunWorker(runControl) + : RunWorker(runControl), d(new DebuggerRunToolPrivate) { setDisplayName("DebuggerRunTool"); @@ -745,13 +755,25 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit) QString(), QString(), optionalPrompt); }); + if (runConfig) + m_runParameters.displayName = runConfig->displayName(); + + if (runConfig && !kit) + kit = runConfig->target()->kit(); + QTC_ASSERT(kit, return); + + m_runParameters.cppEngineType = DebuggerKitInformation::engineType(kit); + m_runParameters.sysRoot = SysRootKitInformation::sysRoot(kit).toString(); + m_runParameters.macroExpander = kit->macroExpander(); + m_runParameters.debugger = DebuggerKitInformation::runnable(kit); + Runnable r = runnable(); if (r.is<StandardRunnable>()) { m_runParameters.inferior = r.as<StandardRunnable>(); - m_runParameters.useTerminal = m_runParameters.inferior.runMode == ApplicationLauncher::Console; // Normalize to work around QTBUG-17529 (QtDeclarative fails with 'File name case mismatch'...) m_runParameters.inferior.workingDirectory = FileUtils::normalizePathName(m_runParameters.inferior.workingDirectory); + setUseTerminal(m_runParameters.inferior.runMode == ApplicationLauncher::Console); } if (auto aspect = runConfig ? runConfig->extraAspect<DebuggerRunConfigurationAspect>() : nullptr) { @@ -760,16 +782,6 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit) m_runParameters.multiProcess = aspect->useMultiProcess(); } - if (runConfig) - m_runParameters.displayName = runConfig->displayName(); - - if (runConfig && !kit) - kit = runConfig->target()->kit(); - QTC_ASSERT(kit, return); - - m_runParameters.macroExpander = kit->macroExpander(); - - m_runParameters.debugger = DebuggerKitInformation::runnable(kit); const QByteArray envBinary = qgetenv("QTC_DEBUGGER_PATH"); if (!envBinary.isEmpty()) m_runParameters.debugger.executable = QString::fromLocal8Bit(envBinary); @@ -787,9 +799,6 @@ DebuggerRunTool::DebuggerRunTool(RunControl *runControl, Kit *kit) if (ok) m_runParameters.nativeMixedEnabled = bool(nativeMixedOverride); - m_runParameters.cppEngineType = DebuggerKitInformation::engineType(kit); - m_runParameters.sysRoot = SysRootKitInformation::sysRoot(kit).toString(); - // This will only be shown in some cases, but we don't want to access // the kit at that time anymore. const QList<Task> tasks = DebuggerKitInformation::validateDebugger(kit); @@ -842,6 +851,7 @@ DebuggerRunTool::~DebuggerRunTool() engine->disconnect(); delete engine; } + delete d; } void DebuggerRunTool::showMessage(const QString &msg, int channel, int timeout) |
