From 3828c94b3938ddc60cc431e719a75ec0c8fdbaf7 Mon Sep 17 00:00:00 2001 From: Tim Sander <tim@krieglstein.org> Date: Thu, 5 Jun 2014 17:22:51 +0200 Subject: [PATCH] GdbDebugger: add fast restart for debugging Change-Id: Ie51847de912748d05a6b208bec82fd612d777202 Reviewed-by: hjk <hjk121@nokiamail.com> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com> --- src/plugins/baremetal/baremetal.pro | 4 - src/plugins/baremetal/baremetal.qbs | 3 +- src/plugins/baremetal/baremetaldevice.cpp | 46 +++++++++ src/plugins/baremetal/baremetaldevice.h | 9 ++ .../baremetaldeviceconfigurationwidget.cpp | 88 ++++++++++++------ .../baremetaldeviceconfigurationwidget.h | 20 +++- .../baremetaldeviceconfigurationwidget.ui | 82 ---------------- .../baremetaldeviceconfigurationwizard.cpp | 1 + ...aremetaldeviceconfigurationwizardpages.cpp | 86 ++++++++++++----- .../baremetaldeviceconfigurationwizardpages.h | 27 +++--- ...metaldeviceconfigurationwizardsetuppage.ui | 86 ----------------- .../baremetal/baremetalruncontrolfactory.cpp | 2 +- .../baremetal/baremetalruncontrolfactory.h | 1 + src/plugins/debugger/debugger.qrc | 2 + src/plugins/debugger/debuggerconstants.h | 4 +- src/plugins/debugger/debuggerengine.h | 1 + src/plugins/debugger/debuggerplugin.cpp | 25 +++++ .../debugger/debuggerstartparameters.h | 1 + src/plugins/debugger/gdb/gdbengine.cpp | 29 +++++- src/plugins/debugger/gdb/gdbengine.h | 1 + .../debugger/gdb/remotegdbserveradapter.cpp | 2 +- .../debugger/images/debugger_restart.png | Bin 0 -> 1035 bytes .../debugger/images/debugger_restart.svg | 77 +++++++++++++++ .../images/debugger_restart_small.png | Bin 0 -> 675 bytes .../remotelinux/remotelinuxdebugsupport.cpp | 1 + 25 files changed, 347 insertions(+), 251 deletions(-) delete mode 100644 src/plugins/baremetal/baremetaldeviceconfigurationwidget.ui delete mode 100644 src/plugins/baremetal/baremetaldeviceconfigurationwizardsetuppage.ui create mode 100644 src/plugins/debugger/images/debugger_restart.png create mode 100644 src/plugins/debugger/images/debugger_restart.svg create mode 100644 src/plugins/debugger/images/debugger_restart_small.png diff --git a/src/plugins/baremetal/baremetal.pro b/src/plugins/baremetal/baremetal.pro index e877b934a12..7cf1db563dd 100644 --- a/src/plugins/baremetal/baremetal.pro +++ b/src/plugins/baremetal/baremetal.pro @@ -27,7 +27,3 @@ HEADERS += baremetalplugin.h \ baremetaldeviceconfigurationwidget.h \ baremetaldeviceconfigurationwizard.h \ baremetaldeviceconfigurationwizardpages.h - -FORMS += \ - baremetaldeviceconfigurationwizardsetuppage.ui \ - baremetaldeviceconfigurationwidget.ui diff --git a/src/plugins/baremetal/baremetal.qbs b/src/plugins/baremetal/baremetal.qbs index 5571c745f63..72a2f3f71f2 100644 --- a/src/plugins/baremetal/baremetal.qbs +++ b/src/plugins/baremetal/baremetal.qbs @@ -21,12 +21,11 @@ QtcPlugin { "baremetaldeviceconfigurationwidget.cpp", "baremetaldeviceconfigurationwidget.h", "baremetaldeviceconfigurationwizard.cpp", "baremetaldeviceconfigurationwizard.h", "baremetaldeviceconfigurationwizardpages.cpp", "baremetaldeviceconfigurationwizardpages.h", - "baremetaldeviceconfigurationwizardsetuppage.ui", "baremetalgdbcommandsdeploystep.cpp", "baremetalgdbcommandsdeploystep.h", "baremetalplugin.cpp", "baremetalplugin.h", "baremetalrunconfiguration.cpp", "baremetalrunconfiguration.h", "baremetalrunconfigurationfactory.cpp", "baremetalrunconfigurationfactory.h", - "baremetalrunconfigurationwidget.cpp", "baremetalrunconfigurationwidget.h", "baremetaldeviceconfigurationwidget.ui", + "baremetalrunconfigurationwidget.cpp", "baremetalrunconfigurationwidget.h", "baremetalruncontrolfactory.cpp", "baremetalruncontrolfactory.h", ] } diff --git a/src/plugins/baremetal/baremetaldevice.cpp b/src/plugins/baremetal/baremetaldevice.cpp index 5913f33a914..8a0ab724d73 100644 --- a/src/plugins/baremetal/baremetaldevice.cpp +++ b/src/plugins/baremetal/baremetaldevice.cpp @@ -38,6 +38,7 @@ using namespace ProjectExplorer; namespace BareMetal { namespace Internal { +const char GdbResetKey[] = "GdbResetCommand"; const char GdbCommandsKey[] = "GdbCommands"; BareMetalDevice::Ptr BareMetalDevice::create() @@ -58,12 +59,14 @@ BareMetalDevice::Ptr BareMetalDevice::create(const BareMetalDevice &other) void BareMetalDevice::fromMap(const QVariantMap &map) { IDevice::fromMap(map); + setGdbResetCommands(map.value(QLatin1String(GdbResetKey)).toString()); setGdbInitCommands(map.value(QLatin1String(GdbCommandsKey)).toString()); } QVariantMap BareMetalDevice::toMap() const { QVariantMap map = IDevice::toMap(); + map.insert(QLatin1String(GdbResetKey), gdbResetCommands()); map.insert(QLatin1String(GdbCommandsKey), gdbInitCommands()); return map; } @@ -114,8 +117,51 @@ BareMetalDevice::BareMetalDevice(const QString &name, Core::Id type, MachineType BareMetalDevice::BareMetalDevice(const BareMetalDevice &other) : IDevice(other) { + setGdbResetCommands(other.gdbResetCommands()); setGdbInitCommands(other.gdbInitCommands()); } +QString BareMetalDevice::exampleString() +{ + return QLatin1String("<p><i>") + + QCoreApplication::translate("BareMetal", "Example:") + + QLatin1String("</i><p>"); +} + +QString BareMetalDevice::hostLineToolTip() +{ + return QLatin1String("<html>") + + QCoreApplication::translate("BareMetal", + "Enter your hostname like \"localhost\" or \"192.0.2.1\" or " + "a command which must support GDB pipelining " + "starting with a pipe symbol.") + + exampleString() + QLatin1String( + " |openocd -c \"gdb_port pipe; " + "log_output openocd.log\" -f boards/myboard.cfg"); +} + +QString BareMetalDevice::resetCommandToolTip() +{ + return QLatin1String("<html>") + + QCoreApplication::translate("BareMetal", + "Enter the hardware reset command here.<br>" + "The CPU should be halted after this command.") + + exampleString() + QLatin1String( + " monitor reset halt"); +} + +QString BareMetalDevice::initCommandToolTip() +{ + return QLatin1String("<html>") + + QCoreApplication::translate("BareMetal", + "Enter commands to reset the board, and write the nonvolatile memory.") + + exampleString() + QLatin1String( + " set remote hardware-breakpoint-limit 6<br/>" + " set remote hardware-watchpoint-limit 4<br/>" + " monitor reset halt<br/>" + " load<br/>" + " monitor reset halt"); +} + } //namespace Internal } //namespace BareMetal diff --git a/src/plugins/baremetal/baremetaldevice.h b/src/plugins/baremetal/baremetaldevice.h index 3da87b64e8d..375fcf400a3 100644 --- a/src/plugins/baremetal/baremetaldevice.h +++ b/src/plugins/baremetal/baremetaldevice.h @@ -55,12 +55,20 @@ public: ProjectExplorer::DeviceProcessSignalOperation::Ptr signalOperation() const; + QString gdbResetCommands() const { return m_gdbResetCommands; } + void setGdbResetCommands(const QString &gdbResetCommands) { m_gdbResetCommands = gdbResetCommands; } + QString gdbInitCommands() const { return m_gdbInitCommands; } void setGdbInitCommands(const QString &gdbCommands) { m_gdbInitCommands=gdbCommands; } virtual void fromMap(const QVariantMap &map); virtual QVariantMap toMap() const; + static QString exampleString(); + static QString hostLineToolTip(); + static QString initCommandToolTip(); + static QString resetCommandToolTip(); + protected: BareMetalDevice() {} BareMetalDevice(const QString &name, Core::Id type, @@ -69,6 +77,7 @@ protected: private: BareMetalDevice &operator=(const BareMetalDevice &); + QString m_gdbResetCommands; QString m_gdbInitCommands; }; diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp index 34cc50b51e3..0431977fbc9 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.cpp @@ -29,74 +29,100 @@ #include "baremetaldeviceconfigurationwidget.h" -#include "ui_baremetaldeviceconfigurationwidget.h" #include "baremetaldevice.h" #include <coreplugin/variablechooser.h> #include <ssh/sshconnection.h> #include <utils/qtcassert.h> +#include <QFormLayout> #include <QLabel> +#include <QLineEdit> +#include <QSpinBox> +#include <QPlainTextEdit> +using namespace Core; using namespace QSsh; namespace BareMetal { -using namespace Internal; +namespace Internal { BareMetalDeviceConfigurationWidget::BareMetalDeviceConfigurationWidget( - const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent) : - IDeviceWidget(deviceConfig, parent), - m_ui(new Ui::BareMetalDeviceConfigurationWidget) + const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent) + : IDeviceWidget(deviceConfig, parent) { - m_ui->setupUi(this); - connect(m_ui->gdbHostLineEdit, SIGNAL(editingFinished()), SLOT(hostnameChanged())); - connect(m_ui->gdbPortSpinBox, SIGNAL(valueChanged(int)), SLOT(portChanged())); - connect(m_ui->gdbCommandsTextEdit, SIGNAL(textChanged()), SLOT(gdbInitCommandsChanged())); - Core::VariableChooser::addVariableSupport(m_ui->gdbCommandsTextEdit); - new Core::VariableChooser(this); - initGui(); -} + SshConnectionParameters sshParams = device()->sshParameters(); + QSharedPointer<BareMetalDevice> p = qSharedPointerCast<BareMetalDevice>(device()); + QTC_ASSERT(!p.isNull(), return); -BareMetalDeviceConfigurationWidget::~BareMetalDeviceConfigurationWidget() -{ - delete m_ui; + m_gdbHostLineEdit = new QLineEdit(this); + m_gdbHostLineEdit->setText(sshParams.host); + m_gdbHostLineEdit->setToolTip(BareMetalDevice::hostLineToolTip()); + + m_gdbPortSpinBox = new QSpinBox(this); + m_gdbPortSpinBox->setRange(1, 65535); + m_gdbPortSpinBox->setValue(sshParams.port); + + m_gdbInitCommandsTextEdit = new QPlainTextEdit(this); + m_gdbInitCommandsTextEdit->setPlainText(p->gdbInitCommands()); + m_gdbInitCommandsTextEdit->setToolTip(BareMetalDevice::initCommandToolTip()); + + m_gdbResetCommandsTextEdit = new QPlainTextEdit(this); + m_gdbResetCommandsTextEdit->setPlainText(p->gdbResetCommands()); + m_gdbResetCommandsTextEdit->setToolTip(BareMetalDevice::resetCommandToolTip()); + + QFormLayout *formLayout = new QFormLayout(this); + formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow); + formLayout->addRow(tr("GDB host:"), m_gdbHostLineEdit); + formLayout->addRow(tr("GDB port:"), m_gdbPortSpinBox); + formLayout->addRow(tr("Init commands:"), m_gdbInitCommandsTextEdit); + formLayout->addRow(tr("Reset commands:"), m_gdbResetCommandsTextEdit); + + VariableChooser::addVariableSupport(m_gdbResetCommandsTextEdit); + VariableChooser::addVariableSupport(m_gdbInitCommandsTextEdit); + (void)new VariableChooser(this); + + connect(m_gdbHostLineEdit, SIGNAL(editingFinished()), SLOT(hostnameChanged())); + connect(m_gdbPortSpinBox, SIGNAL(valueChanged(int)), SLOT(portChanged())); + connect(m_gdbResetCommandsTextEdit, SIGNAL(textChanged()),SLOT(gdbResetCommandsChanged())); + connect(m_gdbInitCommandsTextEdit, SIGNAL(textChanged()), SLOT(gdbInitCommandsChanged())); } void BareMetalDeviceConfigurationWidget::hostnameChanged() { SshConnectionParameters sshParams = device()->sshParameters(); - sshParams.host = m_ui->gdbHostLineEdit->text().trimmed(); + sshParams.host = m_gdbHostLineEdit->text().trimmed(); device()->setSshParameters(sshParams); } void BareMetalDeviceConfigurationWidget::portChanged() { SshConnectionParameters sshParams = device()->sshParameters(); - sshParams.port = m_ui->gdbPortSpinBox->value(); + sshParams.port = m_gdbPortSpinBox->value(); device()->setSshParameters(sshParams); } +void BareMetalDeviceConfigurationWidget::gdbResetCommandsChanged() +{ + QSharedPointer<BareMetalDevice> p = qSharedPointerCast<BareMetalDevice>(device()); + QTC_ASSERT(!p.isNull(), return); + p->setGdbResetCommands(m_gdbResetCommandsTextEdit->toPlainText().trimmed()); +} + void BareMetalDeviceConfigurationWidget::gdbInitCommandsChanged() { QSharedPointer<BareMetalDevice> p = qSharedPointerCast<BareMetalDevice>(device()); QTC_ASSERT(!p.isNull(), return); - p->setGdbInitCommands(m_ui->gdbCommandsTextEdit->toPlainText()); + p->setGdbInitCommands(m_gdbInitCommandsTextEdit->toPlainText()); } -void BareMetalDeviceConfigurationWidget::updateDeviceFromUi() { +void BareMetalDeviceConfigurationWidget::updateDeviceFromUi() +{ hostnameChanged(); portChanged(); + gdbResetCommandsChanged(); gdbInitCommandsChanged(); } -void BareMetalDeviceConfigurationWidget::initGui() -{ - SshConnectionParameters sshParams = device()->sshParameters(); - m_ui->gdbHostLineEdit->setText(sshParams.host); - m_ui->gdbPortSpinBox->setValue(sshParams.port); - QSharedPointer<BareMetalDevice> p = qSharedPointerCast<BareMetalDevice>(device()); - QTC_ASSERT(!p.isNull(), return); - m_ui->gdbCommandsTextEdit->setPlainText(p->gdbInitCommands()); -} - -} //namespace BareMetal +} // namespace Internal +} // namespace BareMetal diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h index 3927a5b397a..fb1dc29088e 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.h @@ -32,9 +32,14 @@ #include <projectexplorer/devicesupport/idevicewidget.h> -namespace BareMetal { +QT_BEGIN_NAMESPACE +class QLineEdit; +class QSpinBox; +class QPlainTextEdit; +QT_END_NAMESPACE -namespace Ui { class BareMetalDeviceConfigurationWidget; } +namespace BareMetal { +namespace Internal { class BareMetalDeviceConfigurationWidget : public ProjectExplorer::IDeviceWidget @@ -44,19 +49,24 @@ class BareMetalDeviceConfigurationWidget public: explicit BareMetalDeviceConfigurationWidget( const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent = 0); - ~BareMetalDeviceConfigurationWidget(); private slots: void hostnameChanged(); void portChanged(); + void gdbResetCommandsChanged(); void gdbInitCommandsChanged(); private: void updateDeviceFromUi(); void initGui(); - Ui::BareMetalDeviceConfigurationWidget *m_ui; + + QLineEdit *m_gdbHostLineEdit; + QSpinBox *m_gdbPortSpinBox; + QPlainTextEdit *m_gdbResetCommandsTextEdit; + QPlainTextEdit *m_gdbInitCommandsTextEdit; }; -} //namespace BareMetal +} // namespace Internal +} // namespace BareMetal #endif // BAREMETALDEVICECONFIGURATIONWIDGET_H diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.ui b/src/plugins/baremetal/baremetaldeviceconfigurationwidget.ui deleted file mode 100644 index 17236089bec..00000000000 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwidget.ui +++ /dev/null @@ -1,82 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>BareMetal::BareMetalDeviceConfigurationWidget</class> - <widget class="QWidget" name="BareMetal::BareMetalDeviceConfigurationWidget"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>496</width> - <height>251</height> - </rect> - </property> - <property name="minimumSize"> - <size> - <width>100</width> - <height>100</height> - </size> - </property> - <property name="windowTitle"> - <string>Form</string> - </property> - <property name="locale"> - <locale language="English" country="UnitedStates"/> - </property> - <layout class="QFormLayout" name="formLayout"> - <property name="fieldGrowthPolicy"> - <enum>QFormLayout::ExpandingFieldsGrow</enum> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="gdbHostLabel"> - <property name="locale"> - <locale language="English" country="UnitedStates"/> - </property> - <property name="text"> - <string>GDB host:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="gdbHostLineEdit"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="gdbPortLabel"> - <property name="locale"> - <locale language="English" country="UnitedStates"/> - </property> - <property name="text"> - <string>GDB port:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QSpinBox" name="gdbPortSpinBox"> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>65535</number> - </property> - <property name="value"> - <number>3333</number> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="gdbCommandsLabel"> - <property name="locale"> - <locale language="English" country="UnitedStates"/> - </property> - <property name="text"> - <string>GDB commands:</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QPlainTextEdit" name="gdbCommandsTextEdit"/> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp index d891267e0ea..ae15ced0b73 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwizard.cpp @@ -78,6 +78,7 @@ IDevice::Ptr BareMetalDeviceConfigurationWizard::device() const Core::Id(Constants::BareMetalOsType), IDevice::Hardware); device->setSshParameters(sshParams); + device->setGdbResetCommands(d->m_setupPage.gdbResetCommands()); device->setGdbInitCommands(d->m_setupPage.gdbInitCommands()); return device; } diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp index 717a6190789..90ef922f837 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.cpp @@ -28,39 +28,73 @@ ****************************************************************************/ #include "baremetaldeviceconfigurationwizardpages.h" -#include "ui_baremetaldeviceconfigurationwizardsetuppage.h" +#include "baremetaldevice.h" #include <coreplugin/variablechooser.h> #include <projectexplorer/devicesupport/idevice.h> +#include <QFormLayout> +#include <QLineEdit> +#include <QPlainTextEdit> +#include <QSpinBox> + +using namespace Core; + namespace BareMetal { namespace Internal { -class BareMetalDeviceConfigurationWizardSetupPagePrivate; -} // namespace Internal -BareMetalDeviceConfigurationWizardSetupPage::BareMetalDeviceConfigurationWizardSetupPage(QWidget *parent) : - QWizardPage(parent), d(new Internal::BareMetalDeviceConfigurationWizardSetupPagePrivate) +BareMetalDeviceConfigurationWizardSetupPage::BareMetalDeviceConfigurationWizardSetupPage(QWidget *parent) + : QWizardPage(parent) { - d->ui.setupUi(this); setTitle(tr("Set up GDB Server or Hardware Debugger")); - setSubTitle(QLatin1String(" ")); // For Qt bug (background color) - connect(d->ui.hostNameLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged())); - connect(d->ui.nameLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged())); - connect(d->ui.portSpinBox, SIGNAL(valueChanged(int)), SIGNAL(completeChanged())); - connect(d->ui.gdbInitCommandsPlainTextEdit, SIGNAL(textChanged()), SIGNAL(completeChanged())); - Core::VariableChooser::addVariableSupport(d->ui.gdbInitCommandsPlainTextEdit); - new Core::VariableChooser(this); -} -BareMetalDeviceConfigurationWizardSetupPage::~BareMetalDeviceConfigurationWizardSetupPage() -{ - delete d; + m_nameLineEdit = new QLineEdit(this); + + m_hostNameLineEdit = new QLineEdit(this); + m_hostNameLineEdit->setToolTip(BareMetalDevice::hostLineToolTip()); + m_hostNameLineEdit->setText(QLatin1String( + "|openocd -c \"gdb_port pipe\" -c \"log_output openocd.log;\" " + "-f board/stm3241g_eval_stlink.cfg")); + + m_portSpinBox = new QSpinBox(this); + m_portSpinBox->setRange(1, 65535); + m_portSpinBox->setValue(3333); + + m_gdbInitCommandsPlainTextEdit = new QPlainTextEdit(this); + m_gdbInitCommandsPlainTextEdit->setToolTip(BareMetalDevice::initCommandToolTip()); + m_gdbInitCommandsPlainTextEdit->setPlainText(QLatin1String( + "set remote hardware-breakpoint-limit 6\n" + "set remote hardware-watchpoint-limit 4\n" + "monitor reset halt\n" + "load\n" + "monitor reset halt")); + + m_gdbResetCommandsTextEdit = new QPlainTextEdit(this); + m_gdbResetCommandsTextEdit->setToolTip(BareMetalDevice::resetCommandToolTip()); + m_gdbResetCommandsTextEdit->setPlainText(QLatin1String("monitor reset halt")); + + QFormLayout *formLayout = new QFormLayout(this); + formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); + formLayout->addRow(tr("Name:"), m_nameLineEdit); + formLayout->addRow(tr("GDB host:"), m_hostNameLineEdit); + formLayout->addRow(tr("GDB port:"), m_portSpinBox); + formLayout->addRow(tr("Init commands:"), m_gdbInitCommandsPlainTextEdit); + formLayout->addRow(tr("Reset commands:"), m_gdbResetCommandsTextEdit); + + connect(m_nameLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged())); + connect(m_hostNameLineEdit, SIGNAL(textChanged(QString)), SIGNAL(completeChanged())); + connect(m_portSpinBox, SIGNAL(valueChanged(int)), SIGNAL(completeChanged())); + connect(m_gdbResetCommandsTextEdit, SIGNAL(textChanged()), SIGNAL(completeChanged())); + connect(m_gdbInitCommandsPlainTextEdit, SIGNAL(textChanged()), SIGNAL(completeChanged())); + + VariableChooser::addVariableSupport(m_gdbResetCommandsTextEdit); + VariableChooser::addVariableSupport(m_gdbInitCommandsPlainTextEdit); + (void)new VariableChooser(this); } void BareMetalDeviceConfigurationWizardSetupPage::initializePage() { - d->ui.nameLineEdit->setText(defaultConfigurationName()); - + m_nameLineEdit->setText(defaultConfigurationName()); } bool BareMetalDeviceConfigurationWizardSetupPage::isComplete() const @@ -70,22 +104,27 @@ bool BareMetalDeviceConfigurationWizardSetupPage::isComplete() const QString BareMetalDeviceConfigurationWizardSetupPage::configurationName() const { - return d->ui.nameLineEdit->text().trimmed(); + return m_nameLineEdit->text().trimmed(); } QString BareMetalDeviceConfigurationWizardSetupPage::gdbHostname() const { - return d->ui.hostNameLineEdit->text().trimmed(); + return m_hostNameLineEdit->text().trimmed(); } quint16 BareMetalDeviceConfigurationWizardSetupPage::gdbPort() const { - return quint16(d->ui.portSpinBox->value()); + return quint16(m_portSpinBox->value()); +} + +QString BareMetalDeviceConfigurationWizardSetupPage::gdbResetCommands() const +{ + return m_gdbResetCommandsTextEdit->toPlainText().trimmed(); } QString BareMetalDeviceConfigurationWizardSetupPage::gdbInitCommands() const { - return d->ui.gdbInitCommandsPlainTextEdit->toPlainText(); + return m_gdbInitCommandsPlainTextEdit->toPlainText().trimmed(); } QString BareMetalDeviceConfigurationWizardSetupPage::defaultConfigurationName() const @@ -93,4 +132,5 @@ QString BareMetalDeviceConfigurationWizardSetupPage::defaultConfigurationName() return tr("Bare Metal Device"); } +} // namespace Internal } // namespace BareMetal diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h index 1cbb75455e8..16096a14947 100644 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h +++ b/src/plugins/baremetal/baremetaldeviceconfigurationwizardpages.h @@ -30,40 +30,41 @@ #ifndef BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H #define BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H -#include "ui_baremetaldeviceconfigurationwizardsetuppage.h" #include <QWizardPage> -namespace BareMetal { +QT_BEGIN_NAMESPACE +class QLineEdit; +class QSpinBox; +class QPlainTextEdit; +QT_END_NAMESPACE +namespace BareMetal { namespace Internal { -class BareMetalDeviceConfigurationWizardSetupPagePrivate -{ -public: - Ui::BareMetalDeviceConfigurationWizardSetupPage ui; -}; - -} // namespace Internal - class BareMetalDeviceConfigurationWizardSetupPage : public QWizardPage { - Q_OBJECT public: explicit BareMetalDeviceConfigurationWizardSetupPage(QWidget *parent = 0); - ~BareMetalDeviceConfigurationWizardSetupPage(); void initializePage(); bool isComplete() const; QString configurationName() const; QString gdbHostname() const; quint16 gdbPort() const; + QString gdbResetCommands() const; QString gdbInitCommands() const; virtual QString defaultConfigurationName() const; + private: - Internal::BareMetalDeviceConfigurationWizardSetupPagePrivate * const d; + QLineEdit *m_nameLineEdit; + QLineEdit *m_hostNameLineEdit; + QSpinBox *m_portSpinBox; + QPlainTextEdit *m_gdbResetCommandsTextEdit; + QPlainTextEdit *m_gdbInitCommandsPlainTextEdit; }; +} // namespace Internal } // namespace BareMetal #endif // BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H diff --git a/src/plugins/baremetal/baremetaldeviceconfigurationwizardsetuppage.ui b/src/plugins/baremetal/baremetaldeviceconfigurationwizardsetuppage.ui deleted file mode 100644 index be6c1dd1203..00000000000 --- a/src/plugins/baremetal/baremetaldeviceconfigurationwizardsetuppage.ui +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>BareMetal::Internal::BareMetalDeviceConfigurationWizardSetupPage</class> - <widget class="QWidget" name="BareMetal::Internal::BareMetalDeviceConfigurationWizardSetupPage"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>517</width> - <height>301</height> - </rect> - </property> - <property name="windowTitle"> - <string>Form</string> - </property> - <property name="locale"> - <locale language="English" country="UnitedStates"/> - </property> - <layout class="QFormLayout" name="formLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="namelabel"> - <property name="text"> - <string>Name:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="nameLineEdit"/> - </item> - <item row="3" column="1"> - <widget class="QLineEdit" name="hostNameLineEdit"> - <property name="text"> - <string>|openocd -c "gdb_port pipe" -c "log_output openocd.log;" -f board/stm3241g_eval_stlink.cfg</string> - </property> - </widget> - </item> - <item row="6" column="0"> - <widget class="QLabel" name="HostPortLabel"> - <property name="text"> - <string>GDB port:</string> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="hostLabel"> - <property name="text"> - <string>GDB host:</string> - </property> - </widget> - </item> - <item row="6" column="1"> - <widget class="QSpinBox" name="portSpinBox"> - <property name="minimum"> - <number>1</number> - </property> - <property name="maximum"> - <number>65535</number> - </property> - <property name="value"> - <number>3333</number> - </property> - </widget> - </item> - <item row="7" column="0"> - <widget class="QLabel" name="gdbInitLabel"> - <property name="text"> - <string>GDB commands:</string> - </property> - </widget> - </item> - <item row="7" column="1"> - <widget class="QPlainTextEdit" name="gdbInitCommandsPlainTextEdit"> - <property name="plainText"> - <string>set remote hardware-breakpoint-limit 6 -set remote hardware-watchpoint-limit 4 -monitor reset halt -load -monitor reset halt</string> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/src/plugins/baremetal/baremetalruncontrolfactory.cpp b/src/plugins/baremetal/baremetalruncontrolfactory.cpp index 04cd5b0b787..b79cfb91f73 100644 --- a/src/plugins/baremetal/baremetalruncontrolfactory.cpp +++ b/src/plugins/baremetal/baremetalruncontrolfactory.cpp @@ -33,7 +33,6 @@ #include "baremetaldevice.h" #include <debugger/debuggerplugin.h> -#include <debugger/debuggerrunner.h> #include <debugger/debuggerstartparameters.h> #include <debugger/debuggerkitinformation.h> #include <projectexplorer/buildsteplist.h> @@ -104,6 +103,7 @@ DebuggerStartParameters BareMetalRunControlFactory::startParameters(const BareMe params.remoteChannel = device->sshParameters().host + QLatin1String(":") + QString::number(device->sshParameters().port); params.remoteSetupNeeded = false; // qml stuff, not needed params.commandsAfterConnect = device->gdbInitCommands().toLatin1(); + params.commandsForReset = device->gdbResetCommands().toLatin1(); BuildConfiguration *bc = target->activeBuildConfiguration(); BuildStepList *bsl = bc->stepList(BareMetalGdbCommandsDeployStep::stepId()); if (bsl) { diff --git a/src/plugins/baremetal/baremetalruncontrolfactory.h b/src/plugins/baremetal/baremetalruncontrolfactory.h index 2b349c687e5..b0b6f2dcefa 100644 --- a/src/plugins/baremetal/baremetalruncontrolfactory.h +++ b/src/plugins/baremetal/baremetalruncontrolfactory.h @@ -34,6 +34,7 @@ #include <projectexplorer/runconfiguration.h> #include <debugger/debuggerstartparameters.h> +#include <debugger/debuggerrunner.h> namespace BareMetal { namespace Internal { diff --git a/src/plugins/debugger/debugger.qrc b/src/plugins/debugger/debugger.qrc index 06ac7d09d1e..5fe047141be 100644 --- a/src/plugins/debugger/debugger.qrc +++ b/src/plugins/debugger/debugger.qrc @@ -36,5 +36,7 @@ <file>images/qml/select.png</file> <file>images/qml/app-on-top.png</file> <file>images/qml/apply-on-save.png</file> + <file>images/debugger_restart.png</file> + <file>images/debugger_restart_small.png</file> </qresource> </RCC> diff --git a/src/plugins/debugger/debuggerconstants.h b/src/plugins/debugger/debuggerconstants.h index 02517dc65c9..838cb7464a7 100644 --- a/src/plugins/debugger/debuggerconstants.h +++ b/src/plugins/debugger/debuggerconstants.h @@ -58,6 +58,7 @@ const char STEP[] = "Debugger.StepLine"; const char STEPOUT[] = "Debugger.StepOut"; const char NEXT[] = "Debugger.NextLine"; const char REVERSE[] = "Debugger.ReverseDirection"; +const char RESET[] = "Debugger.Reset"; const char OPERATE_BY_INSTRUCTION[] = "Debugger.OperateByInstruction"; const char QML_SHOW_APP_ON_TOP[] = "Debugger.QmlShowAppOnTop"; const char QML_UPDATE_ON_SAVE[] = "Debugger.QmlUpdateOnSave"; @@ -162,7 +163,8 @@ enum DebuggerCapabilities MemoryAddressCapability = 0x1000000, ShowModuleSectionsCapability = 0x200000, WatchComplexExpressionsCapability = 0x400000, // Used to filter out challenges for cdb. - AdditionalQmlStackCapability = 0x800000 // C++ debugger engine is able to retrieve QML stack as well. + AdditionalQmlStackCapability = 0x800000, // C++ debugger engine is able to retrieve QML stack as well. + ResetInferiorCapability = 0x1000000 //!< restart program while debugging }; enum LogChannel diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h index e1c41638841..453c755f4b5 100644 --- a/src/plugins/debugger/debuggerengine.h +++ b/src/plugins/debugger/debuggerengine.h @@ -334,6 +334,7 @@ protected: virtual void runEngine() = 0; virtual void shutdownInferior() = 0; virtual void shutdownEngine() = 0; + virtual void resetInferior() {} virtual void detachDebugger(); virtual void exitDebugger(); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 89b2de50aeb..303a1af21ee 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1004,6 +1004,12 @@ public slots: currentEngine()->abortDebugger(); } + void handleReset() + { + currentEngine()->resetLocation(); + currentEngine()->resetInferior(); + } + void handleExecStep() { if (currentEngine()->state() == DebuggerNotReady) { @@ -1250,6 +1256,7 @@ public: QAction *m_reverseDirectionAction; QAction *m_frameUpAction; QAction *m_frameDownAction; + QAction *m_resetAction; QToolButton *m_reverseToolButton; @@ -1258,6 +1265,7 @@ public: QIcon m_continueIcon; QIcon m_interruptIcon; QIcon m_locationMarkIcon; + QIcon m_resetIcon; StatusLabel *m_statusLabel; QComboBox *m_threadBox; @@ -2247,6 +2255,7 @@ void DebuggerPluginPrivate::setInitialState() m_exitAction->setEnabled(false); m_abortAction->setEnabled(false); + m_resetAction->setEnabled(false); m_interruptAction->setEnabled(false); m_continueAction->setEnabled(false); @@ -2386,6 +2395,8 @@ void DebuggerPluginPrivate::updateState(DebuggerEngine *engine) m_abortAction->setEnabled(state != DebuggerNotReady && state != DebuggerFinished); + m_resetAction->setEnabled((stopped || state == DebuggerNotReady) + && engine->hasCapability(ResetInferiorCapability)); m_stepAction->setEnabled(stopped || state == DebuggerNotReady); m_nextAction->setEnabled(stopped || state == DebuggerNotReady); @@ -2775,6 +2786,8 @@ void DebuggerPluginPrivate::extensionsInitialized() m_interruptIcon = QIcon(_(Core::Constants::ICON_PAUSE)); m_interruptIcon.addFile(QLatin1String(":/debugger/images/debugger_interrupt.png")); m_locationMarkIcon = QIcon(_(":/debugger/images/location_16.png")); + m_resetIcon = QIcon(_(":/debugger/images/debugger_restart_small.png:")); + m_resetIcon.addFile(QLatin1String(":/debugger/images/debugger_restart.png")); m_busy = false; @@ -2849,6 +2862,11 @@ void DebuggerPluginPrivate::extensionsInitialized() "resets the debugger to the initial state.")); connect(act, SIGNAL(triggered()), SLOT(handleAbort())); + act = m_resetAction = new QAction(tr("Restart Debugging"),this); + act->setToolTip(tr("Restart the debugging session.")); + act->setIcon(m_resetIcon); + connect(act,SIGNAL(triggered()),SLOT(handleReset())); + act = m_nextAction = new QAction(tr("Step Over"), this); act->setIcon(QIcon(QLatin1String(":/debugger/images/debugger_stepover_small.png"))); connect(act, SIGNAL(triggered()), SLOT(handleExecNext())); @@ -3098,6 +3116,12 @@ void DebuggerPluginPrivate::extensionsInitialized() cmd->setDescription(tr("Reset Debugger")); debugMenu->addAction(cmd, CC::G_DEFAULT_ONE); + cmd = ActionManager::registerAction(m_resetAction, + Constants::RESET, globalcontext); + cmd->setDescription(tr("Restart Debugging")); + cmd->setDefaultKeySequence(QKeySequence(tr("Shift+Ctrl+R"))); + debugMenu->addAction(cmd, CC::G_DEFAULT_ONE); + debugMenu->addSeparator(globalcontext); cmd = ActionManager::registerAction(m_nextAction, @@ -3310,6 +3334,7 @@ void DebuggerPluginPrivate::extensionsInitialized() hbox->addWidget(toolButton(Constants::NEXT)); hbox->addWidget(toolButton(Constants::STEP)); hbox->addWidget(toolButton(Constants::STEPOUT)); + hbox->addWidget(toolButton(Constants::RESET)); hbox->addWidget(toolButton(Constants::OPERATE_BY_INSTRUCTION)); //hbox->addWidget(new StyledSeparator); diff --git a/src/plugins/debugger/debuggerstartparameters.h b/src/plugins/debugger/debuggerstartparameters.h index 17dc02a7b62..4f8ffe7d073 100644 --- a/src/plugins/debugger/debuggerstartparameters.h +++ b/src/plugins/debugger/debuggerstartparameters.h @@ -131,6 +131,7 @@ public: QMap<QString, QString> sourcePathMap; // Used by baremetal plugin + QByteArray commandsForReset; // commands used for resetting the inferior bool useContinueInsteadOfRun; // if connected to a hw debugger run is not possible but continue is used QByteArray commandsAfterConnect; // additional commands to post after connection to debug target diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 41bc6c05b50..02c142415af 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -1213,7 +1213,8 @@ void GdbEngine::handleResultRecord(GdbResponse *response) showMessage(_("ALL COMMANDS DONE; INVOKING CALLBACK")); CommandsDoneCallback cont = m_commandsDoneCallback; m_commandsDoneCallback = 0; - (this->*cont)(); + if (response->resultClass != GdbResultRunning) //only start if the thing is not already running + (this->*cont)(); } else { PENDING_DEBUG("MISSING TOKENS: " << m_cookieForToken.keys()); } @@ -2028,7 +2029,8 @@ bool GdbEngine::hasCapability(unsigned cap) const | RunToLineCapability | WatchComplexExpressionsCapability | MemoryAddressCapability - | AdditionalQmlStackCapability)) + | AdditionalQmlStackCapability + | ResetInferiorCapability)) return true; if (startParameters().startMode == AttachCore) @@ -4430,6 +4432,29 @@ void GdbEngine::abortDebugger() } } +void GdbEngine::resetInferior() +{ + if (!startParameters().commandsForReset.isEmpty()) { + QByteArray substitutedCommands = VariableManager::expandedString( + QString::fromLatin1(startParameters().commandsForReset)).toLatin1(); + foreach (QByteArray command, substitutedCommands.split('\n')) { + command = command.trimmed(); + if (!command.isEmpty()) { + if (state() == InferiorStopOk) { + postCommand(command, ConsoleCommand|Immediate); + } else { + GdbCommand gdbCmd; + gdbCmd.command = command; + gdbCmd.flags = ConsoleCommand; + m_commandsToRunOnTemporaryBreak.append(gdbCmd); + } + } + } + } + requestInterruptInferior(); + runEngine(); +} + void GdbEngine::handleAdapterStartFailed(const QString &msg, Id settingsIdHint) { QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state()); diff --git a/src/plugins/debugger/gdb/gdbengine.h b/src/plugins/debugger/gdb/gdbengine.h index 28a793869ba..215338b25d5 100644 --- a/src/plugins/debugger/gdb/gdbengine.h +++ b/src/plugins/debugger/gdb/gdbengine.h @@ -78,6 +78,7 @@ private: ////////// General Interface ////////// virtual void shutdownInferior(); virtual void shutdownEngine() = 0; virtual void abortDebugger(); + virtual void resetInferior(); virtual bool acceptsDebuggerCommands() const; virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages); diff --git a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp index 4d2098fc9da..ca6e95771d7 100644 --- a/src/plugins/debugger/gdb/remotegdbserveradapter.cpp +++ b/src/plugins/debugger/gdb/remotegdbserveradapter.cpp @@ -406,7 +406,7 @@ void GdbRemoteServerEngine::runEngine() { QTC_ASSERT(state() == EngineRunRequested, qDebug() << state()); - const QString remoteExecutable = startParameters().remoteExecutable; // This is only set for pure QNX + const QString remoteExecutable = startParameters().remoteExecutable; if (!remoteExecutable.isEmpty()) { postCommand("-exec-run", GdbEngine::RunRequest, CB(handleExecRun)); } else { diff --git a/src/plugins/debugger/images/debugger_restart.png b/src/plugins/debugger/images/debugger_restart.png new file mode 100644 index 0000000000000000000000000000000000000000..2c6493120781a902de3cc96ae26f4d0135d9b654 GIT binary patch literal 1035 zcmV+m1oZofP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv00004b3#c}2nYxW zd<bNS00009a7bBm000-d000-d0rU=cFaQ7m8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11BgjPK~zYIjg?z$6jdC?e`j{L7s}Qy>=J6Fh8AonmO{~*4vON^ zh^?{l^3s?wUg3d=QGo|F#0xx#36PqoXw<+2Fjl2O5K<edYZ$dCttgEyv;+z*E82p! zrPn<^?5^2PPo4cI^Dy7{{l9O{nR5|RN}NhJ#eKjRHaKV*@@uDF&CxwpD->9DDvhZI zxKhL>mD>*JrYHiQ27Uw%T88|`$wW8Bi$FQh3#?1-(QLvsz^Qas<_mMY^Y;M_DVRS2 zYyoP3$ARy4Q)EpF&`t3q@J^N|+f`TD#NL{Arg^+U-4x{x8LMsY3xV|$0(4VU0PlIz ze4?(hiIRZM{_wjDj`l}^9*2NV1-3yqMQ-v4HUZj}JL_36^H%DAdy8!?&j1{<4B6!n z@Sy_B0$vBubW@Z8tIBgLxn*{cP*(%nkFNvx33$}O9LtbRK%;^(bW>z%z*7LL7jGsi zqwH*b319%IvJ818E*@7HBx4(asEtnpmTN$9PDX%Ye>ul49^~xRc7UChA^%7c+jlX* zH%X)T8E8>xR%*cf{Op?m2=}&5YK|K;6I-$}{(K4?wwWDK1l;WguD`)M4}c5(XA;DD zyV5e`1G*{Z0A9<G?FzFK3hX*J@Mr&UpC7=N9!L;=g&2nwm8rn4X+TG~uML1g-=YLj z@;^pXRl!sNosog_^bSQ>mRHR*j~8IAZi-Y7LgHFOL3L<AJ;0t*Z<3P{pmxFY0ENUh zU#j&6P^`dri;CT7z-f;wz2K9YFgY0kHXgm7<2_9PF9TaGLyk`I<$j<Js8!J2K)#St zqMPDbV8^0a%h(<~f=jsB^ldGnt_FbLfscV-fD6D3AP=YlR-yj60MA*5+>r=y0|$V6 zOK08Aw%}nh-P1X7=_ntZe3f4>f5&Kago?Z>md;*5OV3xdMM8{>4^1^?yDURK1|Sl5 zvTlm$KnPfppIyY7#hbb7#)l9H#^o3n`#ZQi*iF&QG5|)#hiHq0Xz6a`hn_|v1OIKE zW5n+3;RylpklgrmEC-n9E9IWKk5K3<p&;jG(p(vMv@|5Kp0VgC&F4Pj^YGi8={q?F zYz1CRm`@5w3VJv$o;v~0tLBwE_VD*`FNZol;=t+m`Rm%HD9{Y7w+z{8_fiJLL(+i< zfh9mGP+ByjEPJ8<wt+7@cby#?8|)@_{_M958Bv-5{{q9zI+Dx=0^I-r002ovPDHLk FV1hX0%0U1C literal 0 HcmV?d00001 diff --git a/src/plugins/debugger/images/debugger_restart.svg b/src/plugins/debugger/images/debugger_restart.svg new file mode 100644 index 00000000000..08af9db3e3d --- /dev/null +++ b/src/plugins/debugger/images/debugger_restart.svg @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg2403" + height="16" + width="16" + version="1.0" + inkscape:version="0.48.4 r9939" + sodipodi:docname="restartF.svg" + inkscape:export-filename="/home/tstone/projekte/stm32/qt-creator/src/plugins/debugger/images/restart.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90"> + <metadata + id="metadata9"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs7" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="812" + inkscape:window-height="480" + id="namedview5" + showgrid="false" + inkscape:zoom="2.6074563" + inkscape:cx="29.713525" + inkscape:cy="39.686584" + inkscape:window-x="528" + inkscape:window-y="112" + inkscape:window-maximized="0" + inkscape:current-layer="svg2403" /> + <path + id="circle" + style="fill:none;stroke:#39a200;stroke-width:3;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="M 4.3814407,4.7280695 C 1.0195763,7.1548695 2.1753174,13.61748 7.4891237,13.770186 12.207451,13.905779 15.5821,9.9571474 11.885043,4.5928762" + inkscape:connector-curvature="0" + sodipodi:nodetypes="csc" /> + <path + id="topmark" + style="stroke:#39a200;stroke-linecap:round;stroke-width:3;fill:none;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" + d="m8 6.9952v-4.9904" /> + <path + style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" + d="M 4.677966,4.5423729 C 0.38168193,7.6562328 2.6923842,13.541247 7.5932203,13.627119" + id="arrow" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ffffff;fill-opacity:0.94117647;stroke:#39a200;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="M 7.8291211,15.145082 11.463143,13.540112 7.7592641,12.467117 z" + id="arrowhead" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> +</svg> diff --git a/src/plugins/debugger/images/debugger_restart_small.png b/src/plugins/debugger/images/debugger_restart_small.png new file mode 100644 index 0000000000000000000000000000000000000000..6b10c8fe79ed0a2d0c55dddac22218be4e1b2d9c GIT binary patch literal 675 zcmV;U0$lxxP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004b3#c}2nYxW zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10w765K~y-6m6KgalVKEqpYv_HQZZ~d5*Rq50wEZYx)qfmwVS#L zA<&f+^g}2_kVqH`L0A2dMuddSF9@AQM1+!IMlA!2E-aQ1f`VOGXe!gz_ML9r{2VRl zy*lS`&U60WBdSWa=Qrgb28l?mzR2cd{3Eyq=*MDkPq$S4H$arKl&r8Xo1fFJ_)Iw? zuuGD(XQIoyq$I~dhYB<CB^pOhX>3geep4<N=a<|$>%Drya&SE}Q;w6<DjWt*=H}75 zrUieucne({+io8i=KIn#qP))pSnwgOD2)}Sl%@e9T&OE+Vr06XaJ2oU%c3O{@HVKA zR2f-OT@DDQ0V<SLZ9c-oXa_*+P`xe-45t$cpH}L<VPjUW0u)JVlB6b(BtHROAJZWW zs)0Zxs9^xHcw+->1=|)9Rvf31i{-$TvSogtB;-3*WP$kV3}AM0{tE$55P?gX{R2pw z7*3&ib&h;a0}O-aYwylk0Z$#3n*xV?rks~HNw2uVlv1CEutL3!*$p76Ti9*NEpKsE z!<D_gbbf4MXtHlM&sjLNrD%s|^xI%TEU{=ShrW3iwPQ6JM^#Z(_V-fY3o(BDsaIc3 zKGxXp1${p8Ko{b3I=4Kd&%TB<(BoELh?}%xq~gSWjsCE#*I!%|r9lw)Hup}ND(~`S zymMh-;{Hf1vDgy{>b*6y$#%}=T~boCZo_uO5gj=CW9qL?z#mKb))u@b7X<(S002ov JPDHLkV1myK9zy^C literal 0 HcmV?d00001 diff --git a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp index db9b15f45d1..11a5f0df529 100644 --- a/src/plugins/remotelinux/remotelinuxdebugsupport.cpp +++ b/src/plugins/remotelinux/remotelinuxdebugsupport.cpp @@ -104,6 +104,7 @@ DebuggerStartParameters LinuxDeviceDebugSupport::startParameters(const AbstractR params.startMode = AttachToRemoteServer; params.executable = runConfig->localExecutableFilePath(); params.remoteChannel = device->sshParameters().host + QLatin1String(":-1"); + params.remoteExecutable = runConfig->remoteExecutableFilePath(); } else { params.startMode = AttachToRemoteServer; } -- GitLab