From da36d051a9f706ccad6ee897c541aa7d49ca1f9a Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Tue, 28 Jul 2009 09:10:35 +0200
Subject: [PATCH] Debugger: Fix debugging external executables/attaching to
 pid.

... by creating a default run configuration.
---
 src/plugins/debugger/debuggerplugin.cpp |  5 ++++
 src/plugins/debugger/debuggerrunner.cpp | 33 +++++++++++++++++++++++++
 src/plugins/debugger/debuggerrunner.h   |  2 ++
 3 files changed, 40 insertions(+)

diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 6319f1f648e..7c122304faf 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 b1d531493e4..88316d0d5ba 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 a9a4027d479..c9d3da9a055 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;
-- 
GitLab