diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 1904c20f5787c96c13f5875db0ca4825cb19f64c..9a9251aa8d317a5e65d632d36c55dbe9175fe702 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -367,48 +367,48 @@ static inline bool isMsvcFlavor(Abi::OSFlavor osf) || osf == Abi::WindowsMsvc2012Flavor; } -bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check) -{ -#ifdef Q_OS_WIN - const Abi abi = sp.toolChainAbi; - if (!isCdbEngineEnabled()) { - check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine required for %1 is currently disabled."). - arg(abi.toString())); - check->settingsCategory = QLatin1String(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY); - check->settingsPage = CdbOptionsPage::settingsId(); - return false; - } - - if (!validMode(sp.startMode)) { - check->errorDetails.push_back(CdbEngine::tr("The CDB engine does not support start mode %1.").arg(sp.startMode)); - return false; - } - - if (abi.binaryFormat() != Abi::PEFormat || abi.os() != Abi::WindowsOS) { - check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine does not support the %1 ABI."). - arg(abi.toString())); - return false; - } - - if (sp.startMode == AttachCore && !isMsvcFlavor(abi.osFlavor())) { - check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine cannot debug gdb core files.")); - return false; - } - - if (sp.debuggerCommand.isEmpty()) { - check->errorDetails.push_back(msgNoCdbBinaryForToolChain(abi)); - check->settingsCategory = QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); - check->settingsPage = QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); - return false; - } - - return true; -#else - Q_UNUSED(sp); - check->errorDetails.push_back(QString::fromLatin1("Unsupported debug mode")); - return false; -#endif -} +//bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check) +//{ +//#ifdef Q_OS_WIN +// const Abi abi = sp.toolChainAbi; +// if (!isCdbEngineEnabled()) { +// check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine required for %1 is currently disabled."). +// arg(abi.toString())); +// check->settingsCategory = QLatin1String(Debugger::Constants::DEBUGGER_SETTINGS_CATEGORY); +// check->settingsPage = CdbOptionsPage::settingsId(); +// return false; +// } + +// if (!validMode(sp.startMode)) { +// check->errorDetails.push_back(CdbEngine::tr("The CDB engine does not support start mode %1.").arg(sp.startMode)); +// return false; +// } + +// if (abi.binaryFormat() != Abi::PEFormat || abi.os() != Abi::WindowsOS) { +// check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine does not support the %1 ABI."). +// arg(abi.toString())); +// return false; +// } + +// if (sp.startMode == AttachCore && !isMsvcFlavor(abi.osFlavor())) { +// check->errorDetails.push_back(CdbEngine::tr("The CDB debug engine cannot debug gdb core files.")); +// return false; +// } + +// if (sp.debuggerCommand.isEmpty()) { +// check->errorDetails.push_back(msgNoCdbBinaryForToolChain(abi)); +// check->settingsCategory = QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); +// check->settingsPage = QLatin1String(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); +// return false; +// } + +// return true; +//#else +// Q_UNUSED(sp); +// check->errorDetails.push_back(QString::fromLatin1("Unsupported debug mode")); +// return false; +//#endif +//} void addCdbOptionPages(QList<Core::IOptionsPage *> *opts) { diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index b6c6ea574596e7b7a814039212267deb998e77e5..1ef98cb0427b9099f1904e934aa528d6ab51eb1f 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -815,9 +815,7 @@ public slots: void setConfigValue(const QString &name, const QVariant &value); QVariant configValue(const QString &name) const; - DebuggerRunControl *createDebugger(const DebuggerStartParameters &sp, - RunConfiguration *rc = 0); - void startDebugger(RunControl *runControl); + //void startDebugger(RunControl *runControl); void displayDebugger(DebuggerEngine *engine, bool updateEngine = true); void dumpLog(); @@ -1093,9 +1091,6 @@ public slots: DebuggerToolTipManager *toolTipManager() const { return m_toolTipManager; } QSharedPointer<GlobalDebuggerOptions> globalDebuggerOptions() const { return m_globalDebuggerOptions; } - // FIXME: Remove. - void maybeEnrichParameters(DebuggerStartParameters *sp); - void updateQmlActions() { action(QmlUpdateOnSave)->setEnabled(boolSetting(ShowQmlObjectTree)); } @@ -1272,24 +1267,6 @@ static QString msgParameterMissing(const QString &a) return DebuggerPlugin::tr("Option '%1' is missing the parameter.").arg(a); } -void DebuggerPluginPrivate::maybeEnrichParameters(DebuggerStartParameters *sp) -{ - if (!boolSetting(AutoEnrichParameters)) - return; - const QString sysroot = sp->sysRoot; - if (sp->debugInfoLocation.isEmpty()) { - sp->debugInfoLocation = sysroot + QLatin1String("/usr/lib/debug"); - } - if (sp->debugSourceLocation.isEmpty()) { - QString base = sysroot + QLatin1String("/usr/src/debug/"); - sp->debugSourceLocation.append(base + QLatin1String("qt5base/src/corelib")); - sp->debugSourceLocation.append(base + QLatin1String("qt5base/src/gui")); - sp->debugSourceLocation.append(base + QLatin1String("qt5base/src/network")); - sp->debugSourceLocation.append(base + QLatin1String("qt5base/src/v8")); - sp->debugSourceLocation.append(base + QLatin1String("qt5declarative/src/qml")); - } -} - bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it, const QStringList::const_iterator &cend, QString *errorMessage) { @@ -1477,10 +1454,8 @@ void DebuggerPluginPrivate::debugProjectBreakMain() void DebuggerPluginPrivate::startAndDebugApplication() { DebuggerStartParameters sp; - if (StartApplicationDialog::run(mainWindow(), m_coreSettings, &sp)) { - if (RunControl *rc = createDebugger(sp)) - startDebugger(rc); - } + if (StartApplicationDialog::run(mainWindow(), m_coreSettings, &sp)) + DebuggerRunControlFactory::createAndScheduleRun(sp); } void DebuggerPluginPrivate::attachCore() @@ -1505,14 +1480,14 @@ void DebuggerPluginPrivate::attachCore() DebuggerStartParameters sp; QString display = dlg.isLocal() ? dlg.localCoreFile() : dlg.remoteCoreFile(); fillParameters(&sp, dlg.profileId()); + sp.masterEngineType = GdbEngineType; sp.executable = dlg.localExecutableFile(); sp.coreFile = dlg.localCoreFile(); sp.displayName = tr("Core file \"%1\"").arg(display); sp.startMode = AttachCore; sp.closeMode = DetachAtClose; sp.overrideStartScript = dlg.overrideStartScript(); - if (DebuggerRunControl *rc = createDebugger(sp)) - startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } struct RemoteCdbMatcher : ProfileMatcher @@ -1557,8 +1532,7 @@ void DebuggerPluginPrivate::startRemoteCdbSession() return; sp.remoteChannel = dlg.connection(); setConfigValue(connectionKey, sp.remoteChannel); - if (RunControl *rc = createDebugger(sp)) - startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } void DebuggerPluginPrivate::attachToRemoteServer() @@ -1568,8 +1542,7 @@ void DebuggerPluginPrivate::attachToRemoteServer() if (StartApplicationDialog::run(mainWindow(), m_coreSettings, &sp)) { sp.closeMode = KillAtClose; sp.serverStartScript.clear(); - if (RunControl *rc = createDebugger(sp)) - startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } } @@ -1629,8 +1602,7 @@ void DebuggerPluginPrivate::attachToProcess(bool startServerOnly) sp.executable = process.exe; sp.startMode = AttachExternal; sp.closeMode = DetachAtClose; - if (DebuggerRunControl *rc = createDebugger(sp)) - startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } else { GdbServerStarter *starter = new GdbServerStarter(dlg, startServerOnly); starter->run(); @@ -1690,9 +1662,7 @@ void DebuggerPluginPrivate::attachToQmlPort() sourceFiles << project->files(Project::ExcludeGeneratedFiles); sp.projectSourceFiles = sourceFiles; - - if (RunControl *rc = createDebugger(sp)) - startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } void DebuggerPluginPrivate::startRemoteEngine() @@ -1714,8 +1684,7 @@ void DebuggerPluginPrivate::startRemoteEngine() sp.executable = dlg.inferiorPath(); sp.serverStartScript = dlg.enginePath(); sp.startMode = StartRemoteEngine; - if (RunControl *rc = createDebugger(sp)) - startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } void DebuggerPluginPrivate::enableReverseDebuggingTriggered(const QVariant &value) @@ -1728,12 +1697,8 @@ void DebuggerPluginPrivate::enableReverseDebuggingTriggered(const QVariant &valu void DebuggerPluginPrivate::runScheduled() { - foreach (const DebuggerStartParameters &sp, m_scheduledStarts) { - RunControl *rc = createDebugger(sp); - QTC_ASSERT(rc, qDebug() << "CANNOT CREATE RUN CONTROL"; continue); - showStatusMessage(sp.startMessage); - startDebugger(rc); - } + foreach (const DebuggerStartParameters &sp, m_scheduledStarts) + DebuggerRunControlFactory::createAndScheduleRun(sp); } void DebuggerPluginPrivate::editorOpened(IEditor *editor) @@ -1949,14 +1914,6 @@ void DebuggerPluginPrivate::requestMark(ITextEditor *editor, } } -DebuggerRunControl *DebuggerPluginPrivate::createDebugger - (const DebuggerStartParameters &sp0, RunConfiguration *rc) -{ - DebuggerStartParameters sp = sp0; - maybeEnrichParameters(&sp); - return m_debuggerRunControlFactory->create(sp, rc); -} - // If updateEngine is set, the engine will update its threads/modules and so forth. void DebuggerPluginPrivate::displayDebugger(DebuggerEngine *engine, bool updateEngine) { @@ -1968,12 +1925,11 @@ void DebuggerPluginPrivate::displayDebugger(DebuggerEngine *engine, bool updateE engine->updateViews(); } -void DebuggerPluginPrivate::startDebugger(RunControl *rc) -{ - QTC_ASSERT(rc, return); - ProjectExplorerPlugin::instance()->startRunControl(rc, DebugRunMode); -} - +//void DebuggerPluginPrivate::startDebugger(RunControl *rc) +//{ +// QTC_ASSERT(rc, return); +// ProjectExplorerPlugin::instance()->startRunControl(rc, DebugRunMode); +//} void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine) { @@ -3362,15 +3318,15 @@ void DebuggerPlugin::remoteCommand(const QStringList &options, theDebuggerCore->remoteCommand(options, list); } +//void DebuggerPlugin::startDebugger(RunControl *runControl) +//{ +// theDebuggerCore->startDebugger(runControl); +//} + DebuggerRunControl *DebuggerPlugin::createDebugger (const DebuggerStartParameters &sp, RunConfiguration *rc) { - return theDebuggerCore->createDebugger(sp, rc); -} - -void DebuggerPlugin::startDebugger(RunControl *runControl) -{ - theDebuggerCore->startDebugger(runControl); + return DebuggerRunControlFactory::doCreate(sp, rc); } void DebuggerPlugin::extensionsInitialized() @@ -3460,10 +3416,8 @@ static LocalApplicationRunConfiguration *activeLocalRunConfiguration() void DebuggerPluginPrivate::testRunProject(const DebuggerStartParameters &sp, const TestCallBack &cb) { m_testCallbacks.append(cb); - RunControl *rctl = createDebugger(sp); - QVERIFY(rctl); - connect(rctl, SIGNAL(finished()), this, SLOT(testRunControlFinished())); - ProjectExplorerPlugin::instance()->startRunControl(rctl, DebugRunMode); + RunControl *rc = DebuggerRunControlFactory::createAndScheduleRun(sp); + connect(rc, SIGNAL(finished()), this, SLOT(testRunControlFinished())); } void DebuggerPluginPrivate::testRunControlFinished() diff --git a/src/plugins/debugger/debuggerplugin.h b/src/plugins/debugger/debuggerplugin.h index 93e6e80498a32d70b0f02ec2a7dc048a999b424b..6ef932add41fe45e569d2ff586ee50fcb4029f44 100644 --- a/src/plugins/debugger/debuggerplugin.h +++ b/src/plugins/debugger/debuggerplugin.h @@ -58,15 +58,16 @@ public: ~DebuggerPlugin(); // Used by Maemo debugging support. - static DebuggerRunControl *createDebugger(const DebuggerStartParameters &sp, - ProjectExplorer::RunConfiguration *rc = 0); - static void startDebugger(ProjectExplorer::RunControl *runControl); + //static void startDebugger(ProjectExplorer::RunControl *runControl); // Used by QmlJSInspector. static bool isActiveDebugLanguage(int language); static DebuggerMainWindow *mainWindow(); static QAction *visibleDebugAction(); + static DebuggerRunControl *createDebugger(const DebuggerStartParameters &sp, + ProjectExplorer::RunConfiguration *rc); + private: // IPlugin implementation. bool initialize(const QStringList &arguments, QString *errorMessage); diff --git a/src/plugins/debugger/debuggerruncontrolfactory.h b/src/plugins/debugger/debuggerruncontrolfactory.h index b429687bc8e2ca179429d6626b59f6aaf0b79268..b53bd94df48ef70623241713ec9d60b6d7738969 100644 --- a/src/plugins/debugger/debuggerruncontrolfactory.h +++ b/src/plugins/debugger/debuggerruncontrolfactory.h @@ -34,7 +34,11 @@ #include <projectexplorer/runconfiguration.h> namespace Debugger { + class DebuggerEngine; +class DebuggerRunControl; +class DebuggerStartParameters; + namespace Internal { class DebuggerRunControlFactory @@ -43,27 +47,30 @@ class DebuggerRunControlFactory public: explicit DebuggerRunControlFactory(QObject *parent); - // This is used by the "Non-Standard" scenarios, e.g. Attach to Core. - // FIXME: What to do in case of a 0 runConfiguration? - typedef ProjectExplorer::RunConfiguration RunConfiguration; - typedef ProjectExplorer::RunControl RunControl; - typedef ProjectExplorer::RunMode RunMode; - DebuggerRunControl *create(const DebuggerStartParameters &sp, - RunConfiguration *runConfiguration = 0); - - // ProjectExplorer::IRunControlFactory // FIXME: Used by qmljsinspector.cpp:469 - RunControl *create(RunConfiguration *runConfiguration, RunMode mode); - bool canRun(RunConfiguration *runConfiguration, RunMode mode) const; + ProjectExplorer::RunControl *create( + ProjectExplorer::RunConfiguration *runConfiguration, + ProjectExplorer::RunMode mode); + + bool canRun(ProjectExplorer::RunConfiguration *runConfiguration, + ProjectExplorer::RunMode mode) const; static DebuggerEngine *createEngine(DebuggerEngineType et, - const DebuggerStartParameters &sp, - DebuggerEngine *masterEngine, - QString *errorMessage); + const DebuggerStartParameters &sp, + DebuggerEngine *masterEngine, + QString *errorMessage); + + static DebuggerRunControl *createAndScheduleRun( + const DebuggerStartParameters &sp, + ProjectExplorer::RunConfiguration *runConfiguration = 0); + + static DebuggerRunControl *doCreate(const DebuggerStartParameters &sp, + ProjectExplorer::RunConfiguration *rc); private: QString displayName() const; - ProjectExplorer::RunConfigWidget *createConfigurationWidget(RunConfiguration *runConfiguration); + ProjectExplorer::RunConfigWidget *createConfigurationWidget( + ProjectExplorer::RunConfiguration *runConfiguration); }; } // namespace Internal diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 59d745fe8ff096de2cabb365b6c91b99cccee0de..317d1ce0e8bd07c4c3747e08e6e6d8ac63093bca 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -50,12 +50,12 @@ #endif #include <projectexplorer/abi.h> +#include <projectexplorer/applicationrunconfiguration.h> // For LocalApplication* +#include <projectexplorer/buildconfiguration.h> #include <projectexplorer/project.h> -#include <projectexplorer/projectexplorerconstants.h> +#include <projectexplorer/projectexplorer.h> #include <projectexplorer/target.h> -#include <projectexplorer/buildconfiguration.h> #include <projectexplorer/toolchain.h> -#include <projectexplorer/applicationrunconfiguration.h> // For LocalApplication* #include <utils/outputformat.h> #include <utils/synchronousprocess.h> @@ -84,11 +84,11 @@ namespace Debugger { namespace Internal { bool isCdbEngineEnabled(); // Check the configuration page -bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check); +//bool checkCdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check); DebuggerEngine *createCdbEngine(const DebuggerStartParameters &sp, DebuggerEngine *masterEngine, QString *error); -bool checkGdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check); +//bool checkGdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check); DebuggerEngine *createGdbEngine(const DebuggerStartParameters &sp, DebuggerEngine *masterEngine); @@ -97,8 +97,7 @@ DebuggerEngine *createPdbEngine(const DebuggerStartParameters &sp); QmlEngine *createQmlEngine(const DebuggerStartParameters &sp, DebuggerEngine *masterEngine); DebuggerEngine *createQmlCppEngine(const DebuggerStartParameters &sp, - DebuggerEngineType slaveEngineType, - QString *errorMessage); + QString *errorMessage); DebuggerEngine *createLldbEngine(const DebuggerStartParameters &sp); extern QString msgNoBinaryForToolChain(const Abi &abi); @@ -319,8 +318,7 @@ DebuggerRunControlPrivate::DebuggerRunControlPrivate(DebuggerRunControl *parent, } // namespace Internal DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration, - const DebuggerStartParameters &sp, - const QPair<DebuggerEngineType, DebuggerEngineType> &masterSlaveEngineTypes) + const DebuggerStartParameters &sp) : RunControl(runConfiguration, DebugRunMode), d(new DebuggerRunControlPrivate(this, runConfiguration)) { @@ -328,10 +326,8 @@ DebuggerRunControl::DebuggerRunControl(RunConfiguration *runConfiguration, // Create the engine. Could arguably be moved to the factory, but // we still have a derived S60DebugControl. Should rarely fail, though. QString errorMessage; - d->m_engine = masterSlaveEngineTypes.first == QmlCppEngineType ? - createQmlCppEngine(sp, masterSlaveEngineTypes.second, &errorMessage) : - DebuggerRunControlFactory::createEngine(masterSlaveEngineTypes.first, sp, - 0, &errorMessage); + d->m_engine = DebuggerRunControlFactory::createEngine(sp.masterEngineType, sp, 0, &errorMessage); + if (d->m_engine) { DebuggerToolTipManager::instance()->registerEngine(d->m_engine); } else { @@ -493,311 +489,6 @@ RunConfiguration *DebuggerRunControl::runConfiguration() const return d->m_myRunConfiguration.data(); } -//////////////////////////////////////////////////////////////////////// -// -// Engine detection logic: Detection functions depending on tool chain, binary, -// etc. Return a list of possible engines (order of prefererence) without -// consideration of configuration, etc. -// -//////////////////////////////////////////////////////////////////////// - -static QList<DebuggerEngineType> enginesForToolChain(const Abi &toolChain, - DebuggerLanguages languages) -{ - QList<DebuggerEngineType> result; - switch (toolChain.binaryFormat()) { - case Abi::ElfFormat: - case Abi::MachOFormat: - result.push_back(LldbEngineType); - result.push_back(GdbEngineType); - if (languages & QmlLanguage) - result.push_back(QmlEngineType); - break; - case Abi::PEFormat: - if (toolChain.osFlavor() == Abi::WindowsMSysFlavor) { - result.push_back(GdbEngineType); - result.push_back(CdbEngineType); - } else { - result.push_back(CdbEngineType); - //result.push_back(GdbEngineType); - } - if (languages & QmlLanguage) - result.push_back(QmlEngineType); - break; - case Abi::RuntimeQmlFormat: - result.push_back(QmlEngineType); - break; - default: - break; - } - return result; -} - -static inline QList<DebuggerEngineType> enginesForScriptExecutables(const QString &executable) -{ - QList<DebuggerEngineType> result; - if (executable.endsWith(_(".js"))) { - result.push_back(ScriptEngineType); - } else if (executable.endsWith(_(".py"))) { - result.push_back(PdbEngineType); - } - return result; -} - -static QList<DebuggerEngineType> enginesForExecutable(const QString &executable) -{ - QList<DebuggerEngineType> result = enginesForScriptExecutables(executable); - if (!result.isEmpty()) - return result; -#ifdef Q_OS_WIN - // A remote executable? - if (!executable.endsWith(_(".exe"), Qt::CaseInsensitive)) { - result.push_back(GdbEngineType); - return result; - } - - // If a file has PDB files, it has been compiled by VS. - QStringList pdbFiles; - QString errorMessage; - if (getPDBFiles(executable, &pdbFiles, &errorMessage) && !pdbFiles.isEmpty()) { - result.push_back(CdbEngineType); - result.push_back(GdbEngineType); - return result; - } - // Fixme: Gdb should only be preferred if MinGW can positively be detected. - result.push_back(GdbEngineType); - result.push_back(CdbEngineType); -#else - result.push_back(LldbEngineType); - result.push_back(GdbEngineType); -#endif - return result; -} - -// Debugger type for mode. -static QList<DebuggerEngineType> enginesForMode(DebuggerStartMode startMode, - DebuggerLanguages languages, - bool hardConstraintsOnly) -{ - QList<DebuggerEngineType> result; - - if (languages == QmlLanguage) { - QTC_ASSERT(startMode == StartInternal - || startMode == AttachToRemoteServer - || startMode == AttachToRemoteProcess, - qDebug() << "qml debugging not supported for mode" - << startMode); - - // Qml language only - result.push_back(QmlEngineType); - return result; - } - - switch (startMode) { - case NoStartMode: - break; - case StartInternal: - case StartExternal: - case AttachExternal: - if (!hardConstraintsOnly) { -#ifdef Q_OS_WIN - result.push_back(CdbEngineType); // Preferably Windows debugger for attaching locally. -#endif - result.push_back(GdbEngineType); - - if (languages & QmlLanguage) - result.push_back(QmlEngineType); - } - break; - case LoadRemoteCore: - result.push_back(GdbEngineType); - break; - case AttachCore: -#ifdef Q_OS_WIN - result.push_back(CdbEngineType); -#endif - result.push_back(GdbEngineType); - break; - case StartRemoteProcess: - case StartRemoteGdb: - result.push_back(GdbEngineType); - if (languages & QmlLanguage) - result.push_back(QmlEngineType); - break; - case AttachToRemoteProcess: - case AttachToRemoteServer: - if (!hardConstraintsOnly) { -#ifdef Q_OS_WIN - result.push_back(CdbEngineType); -#endif - result.push_back(GdbEngineType); - - if (languages & QmlLanguage) - result.push_back(QmlEngineType); - } - break; - case AttachCrashedExternal: - result.push_back(CdbEngineType); // Only CDB can do this - break; - case StartRemoteEngine: - // FIXME: Unclear IPC override. Someone please have a better idea. - // For now thats the only supported IPC engine. - result.push_back(LldbEngineType); - break; - } - return result; -} - -// Engine detection logic: Call all detection functions in order. - -static QList<DebuggerEngineType> engineTypes(const DebuggerStartParameters &sp) -{ - // Script executables and certain start modes are 'hard constraints'. - QList<DebuggerEngineType> result = enginesForScriptExecutables(sp.executable); - if (!result.isEmpty()) - return result; - - result = enginesForMode(sp.startMode, sp.languages, true); - if (!result.isEmpty()) - return result; - - // 'hard constraints' done (with the exception of QML ABI checked here), - // further try to restrict available engines. - if (sp.toolChainAbi.isValid()) { - result = enginesForToolChain(sp.toolChainAbi, sp.languages); - if (!result.isEmpty()) - return result; - } - - if (sp.startMode != AttachToRemoteServer - && sp.startMode != AttachToRemoteProcess - && sp.startMode != LoadRemoteCore - && !sp.executable.isEmpty()) - result = enginesForExecutable(sp.executable); - if (!result.isEmpty()) - return result; - - result = enginesForMode(sp.startMode, sp.languages, false); - return result; -} - -// Engine detection logic: ConfigurationCheck. -ConfigurationCheck::ConfigurationCheck() : - masterSlaveEngineTypes(NoEngineType, NoEngineType) -{ -} - -ConfigurationCheck::operator bool() const -{ - return errorMessage.isEmpty() - && errorDetails.isEmpty() - && masterSlaveEngineTypes.first != NoEngineType; -} - -QString ConfigurationCheck::errorDetailsString() const -{ - return errorDetails.join(QLatin1String("\n\n")); -} - -// Convenience helper to check whether an engine is enabled and configured -// correctly. -static bool canUseEngine(DebuggerEngineType et, - const DebuggerStartParameters &sp, - ConfigurationCheck *result) -{ - switch (et) { - case CdbEngineType: - return checkCdbConfiguration(sp, result); - case GdbEngineType: - return checkGdbConfiguration(sp, result); - default: - break; - } - return true; -} - -/*! - \fn Debugger::ConfigurationCheck Debugger::checkDebugConfiguration(const DebuggerStartParameters &sp) - - This is the master engine detection function that returns the - engine types for a given set of start parameters and checks their - configuration. -*/ - -DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartParameters &sp) -{ - ConfigurationCheck result; - QString abi = sp.toolChainAbi.toString(); - if (debug) - qDebug().nospace() << "checkDebugConfiguration " << abi - << " Start mode=" << sp.startMode << " Executable=" << sp.executable - << " Debugger command=" << sp.debuggerCommand; - // Get all applicable types. - QList<DebuggerEngineType> requiredTypes = engineTypes(sp); - if (requiredTypes.isEmpty()) { - result.errorMessage = QLatin1String("Internal error: Unable to determine " - "debugger engine type for this configuration"); - return result; - } - if (debug) - qDebug() << " Required: " << engineTypeNames(requiredTypes); - - DebuggerEngineType usableType = NoEngineType; - QList<DebuggerEngineType> unavailableTypes; - foreach (DebuggerEngineType et, requiredTypes) { - if (canUseEngine(et, sp, &result)) { - result.errorDetails.clear(); - usableType = et; - break; - } else { - unavailableTypes.push_back(et); - } - } - if (usableType == NoEngineType) { - if (requiredTypes.size() == 1) { - result.errorMessage = DebuggerPlugin::tr( - "The debugger engine '%1' required for debugging binaries of the type '%2'" - " is not configured correctly."). - arg(QLatin1String(engineTypeName(requiredTypes.front())), abi); - } else { - result.errorMessage = DebuggerPlugin::tr( - "None of the debugger engines '%1' capable of debugging binaries of the type '%2'" - " is configured correctly."). - arg(engineTypeNames(requiredTypes), abi); - } - return result; - } - if (debug) - qDebug() << "Configured engine: " << engineTypeName(usableType); - // Inform verbosely about MinGW-gdb/CDB fallbacks. Do not complain about LLDB, for now. - if (!result.errorDetails.isEmpty() && unavailableTypes.count(LldbEngineType) != unavailableTypes.size()) { - const QString msg = DebuggerPlugin::tr( - "The preferred debugger engine for debugging binaries of type '%1' is not available.\n" - "The debugger engine '%2' will be used as a fallback.\nDetails: %3"). - arg(abi, QLatin1String(engineTypeName(usableType)), - result.errorDetails.join(QString(QLatin1Char('\n')))); - debuggerCore()->showMessage(msg, LogWarning); - showMessageBox(QMessageBox::Warning, DebuggerPlugin::tr("Warning"), msg); - } - // Anything left: Happy. - result.errorMessage.clear(); - result.errorDetails.clear(); - - - // Could we actually use a combined qml/cpp-engine? - if (usableType != QmlEngineType - && requiredTypes.contains(QmlEngineType)) { - result.masterSlaveEngineTypes.first = QmlCppEngineType; - result.masterSlaveEngineTypes.second = usableType; - } else { - result.masterSlaveEngineTypes.first = usableType; - } - - if (debug) - qDebug() << engineTypeName(result.masterSlaveEngineTypes.first) - << engineTypeName(result.masterSlaveEngineTypes.second); - return result; -} //////////////////////////////////////////////////////////////////////// // @@ -926,28 +617,144 @@ RunControl *DebuggerRunControlFactory::create return 0; if (mode == DebugRunModeWithBreakOnMain) sp.breakOnMain = true; - return create(sp, runConfiguration); + + return doCreate(sp, runConfiguration); } -RunConfigWidget *DebuggerRunControlFactory::createConfigurationWidget - (RunConfiguration *runConfiguration) +static DebuggerEngineType guessUnixCppEngineType(const DebuggerStartParameters &sp) { - return new DebuggerRunConfigWidget(runConfiguration); + if (sp.debuggerCommand.contains(QLatin1String("lldb"))) + return LldbEngineType; + return GdbEngineType; } -DebuggerRunControl *DebuggerRunControlFactory::create - (const DebuggerStartParameters &sp, RunConfiguration *runConfiguration) +static DebuggerEngineType guessCppEngineTypeForAbi(const DebuggerStartParameters &sp, const Abi &abi) { - const ConfigurationCheck check = checkDebugConfiguration(sp); + switch (abi.binaryFormat()) { + case Abi::ElfFormat: + case Abi::MachOFormat: + return guessUnixCppEngineType(sp) ; + case Abi::PEFormat: + if (abi.osFlavor() == Abi::WindowsMSysFlavor) + return guessUnixCppEngineType(sp); + return CdbEngineType; + default: + break; + } + return NoEngineType; +} - if (!check) { - //appendMessage(errorMessage, true); - Core::ICore::showWarningWithOptions(DebuggerPlugin::tr("Debugger"), - check.errorMessage, check.errorDetailsString(), check.settingsCategory, check.settingsPage); - return 0; +static DebuggerEngineType guessCppEngineType(const DebuggerStartParameters &sp, RunConfiguration *rc) +{ + if (rc) { + if (Target *target = rc->target()) { + Profile *profile = target->profile(); + if (ToolChain *tc = ToolChainProfileInformation::toolChain(profile)) { + DebuggerEngineType et = guessCppEngineTypeForAbi(sp, tc->targetAbi()); + if (et != NoEngineType) + return et; + } + } + } + + #ifdef Q_OS_WIN + // If a file has PDB files, it has been compiled by VS. + if (sp.executable.endsWith(_(".exe"), Qt::CaseInsensitive)) { + QStringList pdbFiles; + QString errorMessage; + if (getPDBFiles(sp.executable, &pdbFiles, &errorMessage) && !pdbFiles.isEmpty()) + return CdbEngineType; + } + #endif + + QList<Abi> abis = Abi::abisOfBinary(FileName::fromString(sp.executable)); + foreach (const Abi &abi, abis) { + DebuggerEngineType et = guessCppEngineTypeForAbi(sp, abi); + if (et != NoEngineType) + return et; + } + + return guessUnixCppEngineType(sp); +} + +static void fixupEngineTypes(DebuggerStartParameters &sp, RunConfiguration *rc) +{ + if (sp.masterEngineType != NoEngineType) + return; + + if (sp.executable.endsWith(_(".js"))) { + sp.masterEngineType = ScriptEngineType; + return; + } + + if (sp.executable.endsWith(_(".py"))) { + sp.masterEngineType = PdbEngineType; + return; + } + + if (rc) { + DebuggerRunConfigurationAspect *aspect = rc->debuggerAspect(); + bool useCppDebugger = aspect->useCppDebugger(); + bool useQmlDebugger = aspect->useQmlDebugger(); + if (useQmlDebugger) { + if (useCppDebugger) { + sp.masterEngineType = QmlCppEngineType; + sp.firstSlaveEngineType = guessCppEngineType(sp, rc); + sp.secondSlaveEngineType = QmlCppEngineType; + } else { + sp.masterEngineType = QmlEngineType; + } + } else { + sp.masterEngineType = guessCppEngineType(sp, rc); + } + return; + } + + sp.masterEngineType = guessCppEngineType(sp, rc); +} + +DebuggerRunControl *DebuggerRunControlFactory::doCreate + (const DebuggerStartParameters &sp0, RunConfiguration *rc) +{ + DebuggerStartParameters sp = sp0; + if (!debuggerCore()->boolSetting(AutoEnrichParameters)) { + const QString sysroot = sp.sysRoot; + if (sp.debugInfoLocation.isEmpty()) { + sp.debugInfoLocation = sysroot + QLatin1String("/usr/lib/debug"); + } + if (sp.debugSourceLocation.isEmpty()) { + QString base = sysroot + QLatin1String("/usr/src/debug/"); + sp.debugSourceLocation.append(base + QLatin1String("qt5base/src/corelib")); + sp.debugSourceLocation.append(base + QLatin1String("qt5base/src/gui")); + sp.debugSourceLocation.append(base + QLatin1String("qt5base/src/network")); + sp.debugSourceLocation.append(base + QLatin1String("qt5base/src/v8")); + sp.debugSourceLocation.append(base + QLatin1String("qt5declarative/src/qml")); + } } - return new DebuggerRunControl(runConfiguration, sp, check.masterSlaveEngineTypes); + fixupEngineTypes(sp, rc); + if (!sp.masterEngineType) + return 0; + + return new DebuggerRunControl(rc, sp); +} + +DebuggerRunControl *DebuggerRunControlFactory::createAndScheduleRun + (const DebuggerStartParameters &sp, RunConfiguration *runConfiguration) +{ + DebuggerRunControl *rc = doCreate(sp, runConfiguration); + if (!rc) + return 0; + debuggerCore()->showMessage(sp.startMessage, 0); + ProjectExplorerPlugin::instance()->startRunControl(rc, DebugRunMode); + return rc; +} + + +RunConfigWidget *DebuggerRunControlFactory::createConfigurationWidget + (RunConfiguration *runConfiguration) +{ + return new DebuggerRunConfigWidget(runConfiguration); } DebuggerEngine *DebuggerRunControlFactory::createEngine @@ -969,6 +776,8 @@ DebuggerEngine *DebuggerRunControlFactory::createEngine return createQmlEngine(sp, masterEngine); case LldbEngineType: return createLldbEngine(sp); + case QmlCppEngineType: + return createQmlCppEngine(sp, errorMessage); default: break; } diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h index 08c385c26bde7d7cb990ea40876902e3edf90ef7..d8b9d4e4d90f0fc7b9658510e6cce78b865d7001 100644 --- a/src/plugins/debugger/debuggerrunner.h +++ b/src/plugins/debugger/debuggerrunner.h @@ -55,35 +55,14 @@ class DebuggerRunControlFactory; } // namespace Internal -class DEBUGGER_EXPORT ConfigurationCheck -{ -public: - ConfigurationCheck(); - operator bool() const; - QString errorDetailsString() const; - - QString errorMessage; - QStringList errorDetails; - QString settingsCategory; - QString settingsPage; - QPair<DebuggerEngineType, DebuggerEngineType> masterSlaveEngineTypes; -}; - -DEBUGGER_EXPORT ConfigurationCheck checkDebugConfiguration(const DebuggerStartParameters &sp); - -// This is a job description containing all data "local" to the jobs, including -// the models of the individual debugger views. class DEBUGGER_EXPORT DebuggerRunControl : public ProjectExplorer::RunControl { Q_OBJECT public: - typedef ProjectExplorer::RunConfiguration RunConfiguration; - explicit DebuggerRunControl(RunConfiguration *runConfiguration, - const DebuggerStartParameters &sp, - const QPair<DebuggerEngineType, DebuggerEngineType> &masterSlaveEngineTypes); - + DebuggerRunControl(ProjectExplorer::RunConfiguration *runConfiguration, + const DebuggerStartParameters &sp); ~DebuggerRunControl(); // ProjectExplorer::RunControl @@ -97,7 +76,7 @@ public: void setCustomEnvironment(Utils::Environment env); void startFailed(); void debuggingFinished(); - RunConfiguration *runConfiguration() const; + ProjectExplorer::RunConfiguration *runConfiguration() const; DebuggerEngine *engine(); // FIXME: Remove. Only used by Maemo support. void showMessage(const QString &msg, int channel); @@ -112,7 +91,7 @@ protected: const DebuggerStartParameters &startParameters() const; private: - friend class Internal::DebuggerRunControlFactory; + //friend class Internal::DebuggerRunControlFactory; Internal::DebuggerRunControlPrivate *d; }; diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h index 7a2165f162bfa5e2af56379e899750f2d8c0bbda..dbda1c62f995d06f1406395af0285d0363992918 100644 --- a/src/plugins/debugger/debuggerstartparameters.h +++ b/src/plugins/debugger/debuggerstartparameters.h @@ -56,7 +56,9 @@ public: }; DebuggerStartParameters() - : engineType(NoEngineType), + : masterEngineType(NoEngineType), + firstSlaveEngineType(NoEngineType), + secondSlaveEngineType(NoEngineType), isSnapshot(false), attachPID(-1), useTerminal(false), @@ -78,7 +80,9 @@ public: //Core::Id profileId; - DebuggerEngineType engineType; + DebuggerEngineType masterEngineType; + DebuggerEngineType firstSlaveEngineType; + DebuggerEngineType secondSlaveEngineType; QString sysRoot; QString debuggerCommand; ProjectExplorer::Abi toolChainAbi; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 30da068c8c31676e6a513d4367ada2bcd4459f68..af672d8252f0132e1d42beb06b64ec42c6835e6a 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -34,6 +34,7 @@ #include "debuggerstartparameters.h" #include "debuggerinternalconstants.h" +#include "debuggerruncontrolfactory.h" #include "disassemblerlines.h" #include "attachgdbadapter.h" #include "coregdbadapter.h" @@ -3724,8 +3725,7 @@ void GdbEngine::handleMakeSnapshot(const GdbResponse &response) } sp.displayName = function + _(": ") + QDateTime::currentDateTime().toString(); sp.isSnapshot = true; - DebuggerRunControl *rc = DebuggerPlugin::createDebugger(sp); - DebuggerPlugin::startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } else { QByteArray msg = response.data.findChild("msg").data(); showMessageBox(QMessageBox::Critical, tr("Snapshot Creation Error"), @@ -4635,26 +4635,26 @@ static QString gdbBinary(const DebuggerStartParameters &sp) return sp.debuggerCommand; } -bool checkGdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check) -{ - const QString binary = gdbBinary(sp); - const Abi abi = sp.toolChainAbi; - if (binary.isEmpty()) { - check->errorDetails.push_back(msgNoGdbBinaryForToolChain(abi)); - check->settingsCategory = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); - check->settingsPage = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); - return false; - } - if (abi.os() == Abi::WindowsOS && !QFileInfo(binary).isAbsolute()) { - // See initialization below, we need an absolute path to be able to locate Python on Windows. - check->errorDetails.push_back(GdbEngine::tr("The gdb location must be given as an " - "absolute path in the debugger settings (%1).").arg(binary)); - check->settingsCategory = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); - check->settingsPage = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); - return false; - } - return true; -} +//bool checkGdbConfiguration(const DebuggerStartParameters &sp, ConfigurationCheck *check) +//{ +// const QString binary = gdbBinary(sp); +// const Abi abi = sp.toolChainAbi; +// if (binary.isEmpty()) { +// check->errorDetails.push_back(msgNoGdbBinaryForToolChain(abi)); +// check->settingsCategory = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); +// check->settingsPage = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); +// return false; +// } +// if (abi.os() == Abi::WindowsOS && !QFileInfo(binary).isAbsolute()) { +// // See initialization below, we need an absolute path to be able to locate Python on Windows. +// check->errorDetails.push_back(GdbEngine::tr("The gdb location must be given as an " +// "absolute path in the debugger settings (%1).").arg(binary)); +// check->settingsCategory = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); +// check->settingsPage = _(ProjectExplorer::Constants::PROJECTEXPLORER_SETTINGS_CATEGORY); +// return false; +// } +// return true; +//} // // Starting up & shutting down diff --git a/src/plugins/debugger/gdb/startgdbserverdialog.cpp b/src/plugins/debugger/gdb/startgdbserverdialog.cpp index 355b53e72e398d3451037dd31fda14d728c4e3be..2ee4370ef5dd1e0fa1c6a69f1bfd9e8a72f3da29 100644 --- a/src/plugins/debugger/gdb/startgdbserverdialog.cpp +++ b/src/plugins/debugger/gdb/startgdbserverdialog.cpp @@ -35,6 +35,7 @@ #include "debuggerplugin.h" #include "debuggerprofileinformation.h" #include "debuggerrunner.h" +#include "debuggerruncontrolfactory.h" #include "debuggerstartparameters.h" #include <coreplugin/icore.h> @@ -205,22 +206,15 @@ void GdbServerStarter::attach(int port) return; } - QString channel = QString("%1:%2").arg(d->device->sshParameters().host).arg(port); - DebuggerStartParameters sp; - sp.displayName = tr("Remote: \"%1\"").arg(channel); - sp.remoteChannel = channel; + fillParameters(&sp, d->profile->id()); + sp.masterEngineType = GdbEngineType; + sp.connParams.port = port; + sp.displayName = tr("Remote: \"%1:%2\"").arg(sp.connParams.host).arg(port); sp.executable = localExecutable; sp.startMode = AttachToRemoteServer; sp.closeMode = KillAtClose; - sp.sysRoot = SysRootProfileInformation::sysRoot(d->profile).toString(); - sp.debuggerCommand = DebuggerProfileInformation::debuggerCommand(d->profile).toString(); - sp.connParams = d->device->sshParameters(); - if (ToolChain *tc = ToolChainProfileInformation::toolChain(d->profile)) - sp.toolChainAbi = tc->targetAbi(); - - if (RunControl *rc = DebuggerPlugin::createDebugger(sp)) - DebuggerPlugin::startDebugger(rc); + DebuggerRunControlFactory::createAndScheduleRun(sp); } void GdbServerStarter::handleProcessClosed(int status) diff --git a/src/plugins/debugger/qml/qmlcppengine.cpp b/src/plugins/debugger/qml/qmlcppengine.cpp index b3577998e424cf4f053f80a75a12b3a11f9b2848..5bbe39719c037dfd5883e2584f5024c45f1d8f93 100644 --- a/src/plugins/debugger/qml/qmlcppengine.cpp +++ b/src/plugins/debugger/qml/qmlcppengine.cpp @@ -58,10 +58,9 @@ QmlEngine *createQmlEngine(const DebuggerStartParameters &, DebuggerEngine *masterEngine); DebuggerEngine *createQmlCppEngine(const DebuggerStartParameters &sp, - DebuggerEngineType slaveEngineType, QString *errorMessage) { - QmlCppEngine *newEngine = new QmlCppEngine(sp, slaveEngineType, errorMessage); + QmlCppEngine *newEngine = new QmlCppEngine(sp, errorMessage); if (newEngine->cppEngine()) return newEngine; delete newEngine; @@ -107,13 +106,11 @@ QmlCppEnginePrivate::QmlCppEnginePrivate(QmlCppEngine *parent, // //////////////////////////////////////////////////////////////////////// -QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp, - DebuggerEngineType slaveEngineType, - QString *errorMessage) +QmlCppEngine::QmlCppEngine(const DebuggerStartParameters &sp, QString *errorMessage) : DebuggerEngine(sp), d(new QmlCppEnginePrivate(this, sp)) { setObjectName(QLatin1String("QmlCppEngine")); - d->m_cppEngine = DebuggerRunControlFactory::createEngine(slaveEngineType, sp, this, errorMessage); + d->m_cppEngine = DebuggerRunControlFactory::createEngine(sp.firstSlaveEngineType, sp, this, errorMessage); if (!d->m_cppEngine) { *errorMessage = tr("The slave debugging engine required for combined QML/C++-Debugging could not be created: %1").arg(*errorMessage); return; diff --git a/src/plugins/debugger/qml/qmlcppengine.h b/src/plugins/debugger/qml/qmlcppengine.h index 7e70e4326b77c2cb956705abbc8f2dedc3078dbb..7891cdc80892434bd605dc612914d52e51217a71 100644 --- a/src/plugins/debugger/qml/qmlcppengine.h +++ b/src/plugins/debugger/qml/qmlcppengine.h @@ -43,9 +43,7 @@ class QmlCppEngine : public DebuggerEngine Q_OBJECT public: - explicit QmlCppEngine(const DebuggerStartParameters &sp, - DebuggerEngineType slaveEngineType, - QString *errorMessage); + QmlCppEngine(const DebuggerStartParameters &sp, QString *errorMessage); ~QmlCppEngine(); bool canDisplayTooltip() const; diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp index d14c743ba35c5f95251330428510f601d94b6040..68dfb46f039c1149443074500d86d480a5330a17 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp @@ -42,6 +42,7 @@ #include <debugger/debuggerplugin.h> #include <debugger/debuggerconstants.h> #include <debugger/debuggerstartparameters.h> +#include <debugger/debuggerruncontrolfactory.h> #include <qtsupport/baseqtversion.h> #include <qtsupport/qmlobservertool.h> diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp index 42b424c52f2006a5fe422ccb529133a4d4832942..ebffb5b73ab221f07624f87b06599fe0b9ac9802 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.cpp @@ -139,9 +139,8 @@ static Debugger::DebuggerStartParameters s60DebuggerStartParams(const S60DeviceR } S60DeviceDebugRunControl::S60DeviceDebugRunControl(S60DeviceRunConfiguration *rc, - const Debugger::DebuggerStartParameters &sp, - const QPair<Debugger::DebuggerEngineType, Debugger::DebuggerEngineType> &masterSlaveEngineTypes) : - Debugger::DebuggerRunControl(rc, sp, masterSlaveEngineTypes), + const Debugger::DebuggerStartParameters &sp) : + Debugger::DebuggerRunControl(rc, sp), m_codaRunControl(NULL), m_codaState(ENotUsingCodaRunControl) { @@ -150,7 +149,7 @@ S60DeviceDebugRunControl::S60DeviceDebugRunControl(S60DeviceRunConfiguration *rc arg(rc->localExecutableFileName()); appendMessage(msg, Utils::ErrorMessageFormat); } - if (masterSlaveEngineTypes.first == Debugger::QmlEngineType) { + if (sp.masterEngineType == Debugger::QmlEngineType) { connect(engine(), SIGNAL(requestRemoteSetup()), this, SLOT(remoteSetupRequested())); connect(engine(), SIGNAL(stateChanged(Debugger::DebuggerState)), this, SLOT(qmlEngineStateChanged(Debugger::DebuggerState))); } @@ -239,14 +238,7 @@ ProjectExplorer::RunControl* S60DeviceDebugRunControlFactory::create(RunConfigur { S60DeviceRunConfiguration *rc = qobject_cast<S60DeviceRunConfiguration *>(runConfiguration); QTC_ASSERT(rc && mode == DebugRunMode, return 0); - const Debugger::DebuggerStartParameters startParameters = s60DebuggerStartParams(rc); - const Debugger::ConfigurationCheck check = Debugger::checkDebugConfiguration(startParameters); - if (!check) { - Core::ICore::showWarningWithOptions(S60DeviceDebugRunControl::tr("Debugger for Symbian Platform"), - check.errorMessage, check.errorDetailsString(), check.settingsCategory, check.settingsPage); - return 0; - } - return new S60DeviceDebugRunControl(rc, startParameters, check.masterSlaveEngineTypes); + return new S60DeviceDebugRunControl(rc, s60DebuggerStartParams(rc)); } QString S60DeviceDebugRunControlFactory::displayName() const diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h index ed995cd9d29b6cb1f42073a4db82f9320265f024..f01d4a13c2bfa3bef12648acfb6e583a33e8d98a 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicedebugruncontrol.h @@ -46,8 +46,7 @@ class S60DeviceDebugRunControl : public Debugger::DebuggerRunControl public: explicit S60DeviceDebugRunControl(S60DeviceRunConfiguration *runConfiguration, - const Debugger::DebuggerStartParameters &sp, - const QPair<Debugger::DebuggerEngineType, Debugger::DebuggerEngineType> &masterSlaveEngineTypes); + const Debugger::DebuggerStartParameters &sp); virtual void start(); virtual bool promptToStop(bool *optionalPrompt = 0) const;