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