diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 6319f1f648e25307436e66be7b3bfd0b0c68bf10..7c122304faf11880f35c2242df1fd4c31e427c7d 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1221,6 +1221,9 @@ void DebuggerPlugin::startExternalApplication() m_manager->breakByFunctionMain(); QSharedPointer<RunConfiguration> rc = activeRunConfiguration(); + if (rc.isNull()) + rc = DebuggerRunner::createDefaultRunConfiguration(sp->executable); + if (RunControl *runControl = m_debuggerRunner ->run(rc, ProjectExplorer::Constants::DEBUGMODE, sp, StartExternal)) runControl->start(); @@ -1244,6 +1247,8 @@ void DebuggerPlugin::attachExternalApplication(qint64 pid, const QString &crashP sp->crashParameter = crashParameter; const DebuggerStartMode dsm = crashParameter.isEmpty() ? AttachExternal : AttachCrashedExternal; QSharedPointer<RunConfiguration> rc = activeRunConfiguration(); + if (rc.isNull()) + rc = DebuggerRunner::createDefaultRunConfiguration(); if (RunControl *runControl = m_debuggerRunner ->run(rc, ProjectExplorer::Constants::DEBUGMODE, sp, dsm)) runControl->start(); diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index b1d531493e4fe799e2b5ab92303d2fb5f6ff9408..88316d0d5baa5390470877eb19bd9a12dc747e1a 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -50,6 +50,34 @@ using ProjectExplorer::RunConfiguration; using ProjectExplorer::RunControl; using ProjectExplorer::ApplicationRunConfiguration; +// A default run configuration for external executables or attaching to +// running processes by id. +class DefaultApplicationRunConfiguration : public ProjectExplorer::ApplicationRunConfiguration +{ +public: + explicit DefaultApplicationRunConfiguration(const QString &executable = QString()); + + virtual QString executable() const { return m_executable; } + virtual RunMode runMode() const { return Gui; } + virtual QString workingDirectory() const { return QString(); } + virtual QStringList commandLineArguments() const { return QStringList(); } + virtual ProjectExplorer::Environment environment() const + { return ProjectExplorer::Environment(); } + virtual QString dumperLibrary() const { return QString(); } + virtual QStringList dumperLibraryLocations() const { return QStringList(); } + virtual ProjectExplorer::ToolChain::ToolChainType toolChainType() const + { return ProjectExplorer::ToolChain::UNKNOWN; } + virtual QWidget *configurationWidget() { return 0; } + +private: + const QString m_executable; +}; + +DefaultApplicationRunConfiguration::DefaultApplicationRunConfiguration(const QString &executable) : + ProjectExplorer::ApplicationRunConfiguration(0), + m_executable(executable) +{ +} //////////////////////////////////////////////////////////////////////// // @@ -73,6 +101,11 @@ QString DebuggerRunner::displayName() const return tr("Debug"); } +RunConfigurationPtr DebuggerRunner::createDefaultRunConfiguration(const QString &executable) +{ + return RunConfigurationPtr(new DefaultApplicationRunConfiguration(executable)); +} + RunControl *DebuggerRunner::run(RunConfigurationPtr runConfiguration, const QString &mode, const QSharedPointer<DebuggerStartParameters> &sp, diff --git a/src/plugins/debugger/debuggerrunner.h b/src/plugins/debugger/debuggerrunner.h index a9a4027d47907397c52d97804b87d37e49f1e35e..c9d3da9a0551c56cd1543c7d545ed8d36b044f1f 100644 --- a/src/plugins/debugger/debuggerrunner.h +++ b/src/plugins/debugger/debuggerrunner.h @@ -70,6 +70,8 @@ public: const QSharedPointer<DebuggerStartParameters> &sp, DebuggerStartMode startMode); + static RunConfigurationPtr createDefaultRunConfiguration(const QString &executable = QString()); + private: QSharedPointer<DebuggerStartParameters> m_startParameters; DebuggerManager *m_manager;