From b7563b3db24d9c53eeacaa428c48ff50d18da32f Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 11 Jun 2010 16:06:13 +0200 Subject: [PATCH] debugger: streamline RunControl creation a bit --- src/plugins/debugger/debuggerrunner.cpp | 114 +++++++++++------------- src/plugins/debugger/debuggerrunner.h | 9 +- 2 files changed, 60 insertions(+), 63 deletions(-) diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index d7c606dc2e0..665877e7986 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -76,18 +76,64 @@ QString DebuggerRunControlFactory::displayName() const return tr("Debug"); } -RunControl *DebuggerRunControlFactory::create(const DebuggerStartParametersPtr &sp) +static DebuggerStartParametersPtr localStartParameters(RunConfiguration *runConfiguration) { - return new DebuggerRunControl(m_manager, sp); + DebuggerStartParametersPtr sp(new DebuggerStartParameters()); + QTC_ASSERT(runConfiguration, return sp); + LocalApplicationRunConfiguration *rc = + qobject_cast(runConfiguration); + QTC_ASSERT(rc, return sp); + + sp->startMode = StartInternal; + sp->executable = rc->executable(); + sp->environment = rc->environment().toStringList(); + sp->workingDirectory = rc->workingDirectory(); + sp->processArgs = rc->commandLineArguments(); + + switch (sp->toolChainType) { + case ProjectExplorer::ToolChain::UNKNOWN: + case ProjectExplorer::ToolChain::INVALID: + sp->toolChainType = rc->toolChainType(); + break; + default: + break; + } + if (rc->target()->project()) { + BuildConfiguration *bc = rc->target()->activeBuildConfiguration(); + if (bc) + sp->buildDirectory = bc->buildDirectory(); + } + sp->useTerminal = rc->runMode() == LocalApplicationRunConfiguration::Console; + sp->dumperLibrary = rc->dumperLibrary(); + sp->dumperLibraryLocations = rc->dumperLibraryLocations(); + + QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt( + rc->environment()); + if (!qmakePath.isEmpty()) { + QProcess proc; + QStringList args; + args.append(QLatin1String("-query")); + args.append(QLatin1String("QT_INSTALL_HEADERS")); + proc.start(qmakePath, args); + proc.waitForFinished(); + QByteArray ba = proc.readAllStandardOutput().trimmed(); + QFileInfo fi(QString::fromLocal8Bit(ba) + "/.."); + sp->qtInstallPath = fi.absoluteFilePath(); + } + return sp; } RunControl *DebuggerRunControlFactory::create(RunConfiguration *runConfiguration, const QString &mode) { QTC_ASSERT(mode == ProjectExplorer::Constants::DEBUGMODE, return 0); - LocalApplicationRunConfiguration *rc = qobject_cast(runConfiguration); - QTC_ASSERT(rc, return 0); - return new DebuggerRunControl(m_manager, rc); + DebuggerStartParametersPtr sp = localStartParameters(runConfiguration); + return new DebuggerRunControl(m_manager, sp, runConfiguration); +} + +RunControl *DebuggerRunControlFactory::create(const DebuggerStartParametersPtr &sp) +{ + return new DebuggerRunControl(m_manager, sp, 0); } QWidget *DebuggerRunControlFactory::createConfigurationWidget(RunConfiguration *runConfiguration) @@ -105,62 +151,10 @@ QWidget *DebuggerRunControlFactory::createConfigurationWidget(RunConfiguration * // //////////////////////////////////////////////////////////////////////// - DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, - LocalApplicationRunConfiguration *runConfiguration) - : RunControl(runConfiguration, ProjectExplorer::Constants::DEBUGMODE), - m_startParameters(new DebuggerStartParameters()), - m_manager(manager), - m_running(false) -{ - init(); - if (!runConfiguration) - return; - - m_startParameters->startMode = StartInternal; - m_startParameters->executable = runConfiguration->executable(); - m_startParameters->environment = runConfiguration->environment().toStringList(); - m_startParameters->workingDirectory = runConfiguration->workingDirectory(); - m_startParameters->processArgs = runConfiguration->commandLineArguments(); - - switch (m_startParameters->toolChainType) { - case ProjectExplorer::ToolChain::UNKNOWN: - case ProjectExplorer::ToolChain::INVALID: - m_startParameters->toolChainType = runConfiguration->toolChainType(); - break; - default: - break; - } - if (runConfiguration->target()->project()) { - BuildConfiguration *bc = runConfiguration->target()->activeBuildConfiguration(); - if (bc) - m_startParameters->buildDirectory = bc->buildDirectory(); - } - m_startParameters->useTerminal = - runConfiguration->runMode() == LocalApplicationRunConfiguration::Console; - m_startParameters->dumperLibrary = - runConfiguration->dumperLibrary(); - m_startParameters->dumperLibraryLocations = - runConfiguration->dumperLibraryLocations(); - - QString qmakePath = ProjectExplorer::DebuggingHelperLibrary::findSystemQt( - runConfiguration->environment()); - if (!qmakePath.isEmpty()) { - QProcess proc; - QStringList args; - args.append(QLatin1String("-query")); - args.append(QLatin1String("QT_INSTALL_HEADERS")); - proc.start(qmakePath, args); - proc.waitForFinished(); - QByteArray ba = proc.readAllStandardOutput().trimmed(); - QFileInfo fi(QString::fromLocal8Bit(ba) + "/.."); - m_startParameters->qtInstallPath = fi.absoluteFilePath(); - } - -} - -DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, const DebuggerStartParametersPtr &startParameters) - : RunControl(0, ProjectExplorer::Constants::DEBUGMODE), + const DebuggerStartParametersPtr &startParameters, + ProjectExplorer::RunConfiguration *runConfiguration) + : RunControl(runConfiguration, ProjectExplorer::Constants::DEBUGMODE), m_startParameters(startParameters), m_manager(manager), m_running(false) diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h index 9c39fdd80e8..5660e170304 100644 --- a/src/plugins/debugger/debuggerrunner.h +++ b/src/plugins/debugger/debuggerrunner.h @@ -55,6 +55,7 @@ public: virtual QWidget *createConfigurationWidget(ProjectExplorer::RunConfiguration *runConfiguration); + // This is used by the "Non-Standard" scenarios, e.g. Attach to Core. ProjectExplorer::RunControl *create(const DebuggerStartParametersPtr &sp); private: @@ -69,9 +70,11 @@ class DEBUGGER_EXPORT DebuggerRunControl Q_OBJECT public: - DebuggerRunControl(DebuggerManager *manager, - ProjectExplorer::LocalApplicationRunConfiguration *runConfiguration); - DebuggerRunControl(DebuggerManager *manager, const DebuggerStartParametersPtr &startParameters); + // startParameters are primary. If the user code has a RunConfiguration + // (like the 'standard' LocalRunConfiguration), it should pass it so + // we can pass it down to the ProjectExplorer::RunControl constructor. + DebuggerRunControl(DebuggerManager *manager, const DebuggerStartParametersPtr &startParameters, + ProjectExplorer::RunConfiguration *runConfiguration = 0); void setCustomEnvironment(ProjectExplorer::Environment env);