forked from qt-creator/qt-creator
GdbDebugger: add fast restart for debugging
Change-Id: Ie51847de912748d05a6b208bec82fd612d777202 Reviewed-by: hjk <hjk121@nokiamail.com> Reviewed-by: Leena Miettinen <riitta-leena.miettinen@digia.com>
This commit is contained in:
@@ -27,7 +27,3 @@ HEADERS += baremetalplugin.h \
|
|||||||
baremetaldeviceconfigurationwidget.h \
|
baremetaldeviceconfigurationwidget.h \
|
||||||
baremetaldeviceconfigurationwizard.h \
|
baremetaldeviceconfigurationwizard.h \
|
||||||
baremetaldeviceconfigurationwizardpages.h
|
baremetaldeviceconfigurationwizardpages.h
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
baremetaldeviceconfigurationwizardsetuppage.ui \
|
|
||||||
baremetaldeviceconfigurationwidget.ui
|
|
||||||
|
|||||||
@@ -21,12 +21,11 @@ QtcPlugin {
|
|||||||
"baremetaldeviceconfigurationwidget.cpp", "baremetaldeviceconfigurationwidget.h",
|
"baremetaldeviceconfigurationwidget.cpp", "baremetaldeviceconfigurationwidget.h",
|
||||||
"baremetaldeviceconfigurationwizard.cpp", "baremetaldeviceconfigurationwizard.h",
|
"baremetaldeviceconfigurationwizard.cpp", "baremetaldeviceconfigurationwizard.h",
|
||||||
"baremetaldeviceconfigurationwizardpages.cpp", "baremetaldeviceconfigurationwizardpages.h",
|
"baremetaldeviceconfigurationwizardpages.cpp", "baremetaldeviceconfigurationwizardpages.h",
|
||||||
"baremetaldeviceconfigurationwizardsetuppage.ui",
|
|
||||||
"baremetalgdbcommandsdeploystep.cpp", "baremetalgdbcommandsdeploystep.h",
|
"baremetalgdbcommandsdeploystep.cpp", "baremetalgdbcommandsdeploystep.h",
|
||||||
"baremetalplugin.cpp", "baremetalplugin.h",
|
"baremetalplugin.cpp", "baremetalplugin.h",
|
||||||
"baremetalrunconfiguration.cpp", "baremetalrunconfiguration.h",
|
"baremetalrunconfiguration.cpp", "baremetalrunconfiguration.h",
|
||||||
"baremetalrunconfigurationfactory.cpp", "baremetalrunconfigurationfactory.h",
|
"baremetalrunconfigurationfactory.cpp", "baremetalrunconfigurationfactory.h",
|
||||||
"baremetalrunconfigurationwidget.cpp", "baremetalrunconfigurationwidget.h", "baremetaldeviceconfigurationwidget.ui",
|
"baremetalrunconfigurationwidget.cpp", "baremetalrunconfigurationwidget.h",
|
||||||
"baremetalruncontrolfactory.cpp", "baremetalruncontrolfactory.h",
|
"baremetalruncontrolfactory.cpp", "baremetalruncontrolfactory.h",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ using namespace ProjectExplorer;
|
|||||||
namespace BareMetal {
|
namespace BareMetal {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
|
const char GdbResetKey[] = "GdbResetCommand";
|
||||||
const char GdbCommandsKey[] = "GdbCommands";
|
const char GdbCommandsKey[] = "GdbCommands";
|
||||||
|
|
||||||
BareMetalDevice::Ptr BareMetalDevice::create()
|
BareMetalDevice::Ptr BareMetalDevice::create()
|
||||||
@@ -58,12 +59,14 @@ BareMetalDevice::Ptr BareMetalDevice::create(const BareMetalDevice &other)
|
|||||||
void BareMetalDevice::fromMap(const QVariantMap &map)
|
void BareMetalDevice::fromMap(const QVariantMap &map)
|
||||||
{
|
{
|
||||||
IDevice::fromMap(map);
|
IDevice::fromMap(map);
|
||||||
|
setGdbResetCommands(map.value(QLatin1String(GdbResetKey)).toString());
|
||||||
setGdbInitCommands(map.value(QLatin1String(GdbCommandsKey)).toString());
|
setGdbInitCommands(map.value(QLatin1String(GdbCommandsKey)).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap BareMetalDevice::toMap() const
|
QVariantMap BareMetalDevice::toMap() const
|
||||||
{
|
{
|
||||||
QVariantMap map = IDevice::toMap();
|
QVariantMap map = IDevice::toMap();
|
||||||
|
map.insert(QLatin1String(GdbResetKey), gdbResetCommands());
|
||||||
map.insert(QLatin1String(GdbCommandsKey), gdbInitCommands());
|
map.insert(QLatin1String(GdbCommandsKey), gdbInitCommands());
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
@@ -114,8 +117,51 @@ BareMetalDevice::BareMetalDevice(const QString &name, Core::Id type, MachineType
|
|||||||
BareMetalDevice::BareMetalDevice(const BareMetalDevice &other)
|
BareMetalDevice::BareMetalDevice(const BareMetalDevice &other)
|
||||||
: IDevice(other)
|
: IDevice(other)
|
||||||
{
|
{
|
||||||
|
setGdbResetCommands(other.gdbResetCommands());
|
||||||
setGdbInitCommands(other.gdbInitCommands());
|
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 Internal
|
||||||
} //namespace BareMetal
|
} //namespace BareMetal
|
||||||
|
|||||||
@@ -55,12 +55,20 @@ public:
|
|||||||
|
|
||||||
ProjectExplorer::DeviceProcessSignalOperation::Ptr signalOperation() const;
|
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; }
|
QString gdbInitCommands() const { return m_gdbInitCommands; }
|
||||||
void setGdbInitCommands(const QString &gdbCommands) { m_gdbInitCommands=gdbCommands; }
|
void setGdbInitCommands(const QString &gdbCommands) { m_gdbInitCommands=gdbCommands; }
|
||||||
|
|
||||||
virtual void fromMap(const QVariantMap &map);
|
virtual void fromMap(const QVariantMap &map);
|
||||||
virtual QVariantMap toMap() const;
|
virtual QVariantMap toMap() const;
|
||||||
|
|
||||||
|
static QString exampleString();
|
||||||
|
static QString hostLineToolTip();
|
||||||
|
static QString initCommandToolTip();
|
||||||
|
static QString resetCommandToolTip();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BareMetalDevice() {}
|
BareMetalDevice() {}
|
||||||
BareMetalDevice(const QString &name, Core::Id type,
|
BareMetalDevice(const QString &name, Core::Id type,
|
||||||
@@ -69,6 +77,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
BareMetalDevice &operator=(const BareMetalDevice &);
|
BareMetalDevice &operator=(const BareMetalDevice &);
|
||||||
|
QString m_gdbResetCommands;
|
||||||
QString m_gdbInitCommands;
|
QString m_gdbInitCommands;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -29,74 +29,100 @@
|
|||||||
|
|
||||||
#include "baremetaldeviceconfigurationwidget.h"
|
#include "baremetaldeviceconfigurationwidget.h"
|
||||||
|
|
||||||
#include "ui_baremetaldeviceconfigurationwidget.h"
|
|
||||||
#include "baremetaldevice.h"
|
#include "baremetaldevice.h"
|
||||||
|
|
||||||
#include <coreplugin/variablechooser.h>
|
#include <coreplugin/variablechooser.h>
|
||||||
#include <ssh/sshconnection.h>
|
#include <ssh/sshconnection.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
|
#include <QFormLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QSpinBox>
|
||||||
|
#include <QPlainTextEdit>
|
||||||
|
|
||||||
|
using namespace Core;
|
||||||
using namespace QSsh;
|
using namespace QSsh;
|
||||||
|
|
||||||
namespace BareMetal {
|
namespace BareMetal {
|
||||||
using namespace Internal;
|
namespace Internal {
|
||||||
|
|
||||||
BareMetalDeviceConfigurationWidget::BareMetalDeviceConfigurationWidget(
|
BareMetalDeviceConfigurationWidget::BareMetalDeviceConfigurationWidget(
|
||||||
const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent) :
|
const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent)
|
||||||
IDeviceWidget(deviceConfig, parent),
|
: IDeviceWidget(deviceConfig, parent)
|
||||||
m_ui(new Ui::BareMetalDeviceConfigurationWidget)
|
|
||||||
{
|
{
|
||||||
m_ui->setupUi(this);
|
SshConnectionParameters sshParams = device()->sshParameters();
|
||||||
connect(m_ui->gdbHostLineEdit, SIGNAL(editingFinished()), SLOT(hostnameChanged()));
|
QSharedPointer<BareMetalDevice> p = qSharedPointerCast<BareMetalDevice>(device());
|
||||||
connect(m_ui->gdbPortSpinBox, SIGNAL(valueChanged(int)), SLOT(portChanged()));
|
QTC_ASSERT(!p.isNull(), return);
|
||||||
connect(m_ui->gdbCommandsTextEdit, SIGNAL(textChanged()), SLOT(gdbInitCommandsChanged()));
|
|
||||||
Core::VariableChooser::addVariableSupport(m_ui->gdbCommandsTextEdit);
|
|
||||||
new Core::VariableChooser(this);
|
|
||||||
initGui();
|
|
||||||
}
|
|
||||||
|
|
||||||
BareMetalDeviceConfigurationWidget::~BareMetalDeviceConfigurationWidget()
|
m_gdbHostLineEdit = new QLineEdit(this);
|
||||||
{
|
m_gdbHostLineEdit->setText(sshParams.host);
|
||||||
delete m_ui;
|
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()
|
void BareMetalDeviceConfigurationWidget::hostnameChanged()
|
||||||
{
|
{
|
||||||
SshConnectionParameters sshParams = device()->sshParameters();
|
SshConnectionParameters sshParams = device()->sshParameters();
|
||||||
sshParams.host = m_ui->gdbHostLineEdit->text().trimmed();
|
sshParams.host = m_gdbHostLineEdit->text().trimmed();
|
||||||
device()->setSshParameters(sshParams);
|
device()->setSshParameters(sshParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BareMetalDeviceConfigurationWidget::portChanged()
|
void BareMetalDeviceConfigurationWidget::portChanged()
|
||||||
{
|
{
|
||||||
SshConnectionParameters sshParams = device()->sshParameters();
|
SshConnectionParameters sshParams = device()->sshParameters();
|
||||||
sshParams.port = m_ui->gdbPortSpinBox->value();
|
sshParams.port = m_gdbPortSpinBox->value();
|
||||||
device()->setSshParameters(sshParams);
|
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()
|
void BareMetalDeviceConfigurationWidget::gdbInitCommandsChanged()
|
||||||
{
|
{
|
||||||
QSharedPointer<BareMetalDevice> p = qSharedPointerCast<BareMetalDevice>(device());
|
QSharedPointer<BareMetalDevice> p = qSharedPointerCast<BareMetalDevice>(device());
|
||||||
QTC_ASSERT(!p.isNull(), return);
|
QTC_ASSERT(!p.isNull(), return);
|
||||||
p->setGdbInitCommands(m_ui->gdbCommandsTextEdit->toPlainText());
|
p->setGdbInitCommands(m_gdbInitCommandsTextEdit->toPlainText());
|
||||||
}
|
}
|
||||||
|
|
||||||
void BareMetalDeviceConfigurationWidget::updateDeviceFromUi() {
|
void BareMetalDeviceConfigurationWidget::updateDeviceFromUi()
|
||||||
|
{
|
||||||
hostnameChanged();
|
hostnameChanged();
|
||||||
portChanged();
|
portChanged();
|
||||||
|
gdbResetCommandsChanged();
|
||||||
gdbInitCommandsChanged();
|
gdbInitCommandsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BareMetalDeviceConfigurationWidget::initGui()
|
} // namespace Internal
|
||||||
{
|
} // namespace BareMetal
|
||||||
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
|
|
||||||
|
|||||||
@@ -32,9 +32,14 @@
|
|||||||
|
|
||||||
#include <projectexplorer/devicesupport/idevicewidget.h>
|
#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
|
class BareMetalDeviceConfigurationWidget
|
||||||
: public ProjectExplorer::IDeviceWidget
|
: public ProjectExplorer::IDeviceWidget
|
||||||
@@ -44,19 +49,24 @@ class BareMetalDeviceConfigurationWidget
|
|||||||
public:
|
public:
|
||||||
explicit BareMetalDeviceConfigurationWidget(
|
explicit BareMetalDeviceConfigurationWidget(
|
||||||
const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent = 0);
|
const ProjectExplorer::IDevice::Ptr &deviceConfig, QWidget *parent = 0);
|
||||||
~BareMetalDeviceConfigurationWidget();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void hostnameChanged();
|
void hostnameChanged();
|
||||||
void portChanged();
|
void portChanged();
|
||||||
|
void gdbResetCommandsChanged();
|
||||||
void gdbInitCommandsChanged();
|
void gdbInitCommandsChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateDeviceFromUi();
|
void updateDeviceFromUi();
|
||||||
void initGui();
|
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
|
#endif // BAREMETALDEVICECONFIGURATIONWIDGET_H
|
||||||
|
|||||||
@@ -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>
|
|
||||||
@@ -78,6 +78,7 @@ IDevice::Ptr BareMetalDeviceConfigurationWizard::device() const
|
|||||||
Core::Id(Constants::BareMetalOsType),
|
Core::Id(Constants::BareMetalOsType),
|
||||||
IDevice::Hardware);
|
IDevice::Hardware);
|
||||||
device->setSshParameters(sshParams);
|
device->setSshParameters(sshParams);
|
||||||
|
device->setGdbResetCommands(d->m_setupPage.gdbResetCommands());
|
||||||
device->setGdbInitCommands(d->m_setupPage.gdbInitCommands());
|
device->setGdbInitCommands(d->m_setupPage.gdbInitCommands());
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,39 +28,73 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "baremetaldeviceconfigurationwizardpages.h"
|
#include "baremetaldeviceconfigurationwizardpages.h"
|
||||||
#include "ui_baremetaldeviceconfigurationwizardsetuppage.h"
|
#include "baremetaldevice.h"
|
||||||
|
|
||||||
#include <coreplugin/variablechooser.h>
|
#include <coreplugin/variablechooser.h>
|
||||||
#include <projectexplorer/devicesupport/idevice.h>
|
#include <projectexplorer/devicesupport/idevice.h>
|
||||||
|
|
||||||
|
#include <QFormLayout>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QPlainTextEdit>
|
||||||
|
#include <QSpinBox>
|
||||||
|
|
||||||
|
using namespace Core;
|
||||||
|
|
||||||
namespace BareMetal {
|
namespace BareMetal {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
class BareMetalDeviceConfigurationWizardSetupPagePrivate;
|
|
||||||
} // namespace Internal
|
|
||||||
|
|
||||||
BareMetalDeviceConfigurationWizardSetupPage::BareMetalDeviceConfigurationWizardSetupPage(QWidget *parent) :
|
BareMetalDeviceConfigurationWizardSetupPage::BareMetalDeviceConfigurationWizardSetupPage(QWidget *parent)
|
||||||
QWizardPage(parent), d(new Internal::BareMetalDeviceConfigurationWizardSetupPagePrivate)
|
: QWizardPage(parent)
|
||||||
{
|
{
|
||||||
d->ui.setupUi(this);
|
|
||||||
setTitle(tr("Set up GDB Server or Hardware Debugger"));
|
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()
|
m_nameLineEdit = new QLineEdit(this);
|
||||||
{
|
|
||||||
delete d;
|
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()
|
void BareMetalDeviceConfigurationWizardSetupPage::initializePage()
|
||||||
{
|
{
|
||||||
d->ui.nameLineEdit->setText(defaultConfigurationName());
|
m_nameLineEdit->setText(defaultConfigurationName());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BareMetalDeviceConfigurationWizardSetupPage::isComplete() const
|
bool BareMetalDeviceConfigurationWizardSetupPage::isComplete() const
|
||||||
@@ -70,22 +104,27 @@ bool BareMetalDeviceConfigurationWizardSetupPage::isComplete() const
|
|||||||
|
|
||||||
QString BareMetalDeviceConfigurationWizardSetupPage::configurationName() const
|
QString BareMetalDeviceConfigurationWizardSetupPage::configurationName() const
|
||||||
{
|
{
|
||||||
return d->ui.nameLineEdit->text().trimmed();
|
return m_nameLineEdit->text().trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BareMetalDeviceConfigurationWizardSetupPage::gdbHostname() const
|
QString BareMetalDeviceConfigurationWizardSetupPage::gdbHostname() const
|
||||||
{
|
{
|
||||||
return d->ui.hostNameLineEdit->text().trimmed();
|
return m_hostNameLineEdit->text().trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
quint16 BareMetalDeviceConfigurationWizardSetupPage::gdbPort() const
|
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
|
QString BareMetalDeviceConfigurationWizardSetupPage::gdbInitCommands() const
|
||||||
{
|
{
|
||||||
return d->ui.gdbInitCommandsPlainTextEdit->toPlainText();
|
return m_gdbInitCommandsPlainTextEdit->toPlainText().trimmed();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString BareMetalDeviceConfigurationWizardSetupPage::defaultConfigurationName() const
|
QString BareMetalDeviceConfigurationWizardSetupPage::defaultConfigurationName() const
|
||||||
@@ -93,4 +132,5 @@ QString BareMetalDeviceConfigurationWizardSetupPage::defaultConfigurationName()
|
|||||||
return tr("Bare Metal Device");
|
return tr("Bare Metal Device");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
} // namespace BareMetal
|
} // namespace BareMetal
|
||||||
|
|||||||
@@ -30,40 +30,41 @@
|
|||||||
#ifndef BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H
|
#ifndef BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H
|
||||||
#define BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H
|
#define BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H
|
||||||
|
|
||||||
#include "ui_baremetaldeviceconfigurationwizardsetuppage.h"
|
|
||||||
#include <QWizardPage>
|
#include <QWizardPage>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QLineEdit;
|
||||||
|
class QSpinBox;
|
||||||
|
class QPlainTextEdit;
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
namespace BareMetal {
|
namespace BareMetal {
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class BareMetalDeviceConfigurationWizardSetupPagePrivate
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Ui::BareMetalDeviceConfigurationWizardSetupPage ui;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace Internal
|
|
||||||
|
|
||||||
class BareMetalDeviceConfigurationWizardSetupPage : public QWizardPage
|
class BareMetalDeviceConfigurationWizardSetupPage : public QWizardPage
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
explicit BareMetalDeviceConfigurationWizardSetupPage(QWidget *parent = 0);
|
explicit BareMetalDeviceConfigurationWizardSetupPage(QWidget *parent = 0);
|
||||||
~BareMetalDeviceConfigurationWizardSetupPage();
|
|
||||||
|
|
||||||
void initializePage();
|
void initializePage();
|
||||||
bool isComplete() const;
|
bool isComplete() const;
|
||||||
QString configurationName() const;
|
QString configurationName() const;
|
||||||
QString gdbHostname() const;
|
QString gdbHostname() const;
|
||||||
quint16 gdbPort() const;
|
quint16 gdbPort() const;
|
||||||
|
QString gdbResetCommands() const;
|
||||||
QString gdbInitCommands() const;
|
QString gdbInitCommands() const;
|
||||||
|
|
||||||
virtual QString defaultConfigurationName() const;
|
virtual QString defaultConfigurationName() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Internal::BareMetalDeviceConfigurationWizardSetupPagePrivate * const d;
|
QLineEdit *m_nameLineEdit;
|
||||||
|
QLineEdit *m_hostNameLineEdit;
|
||||||
|
QSpinBox *m_portSpinBox;
|
||||||
|
QPlainTextEdit *m_gdbResetCommandsTextEdit;
|
||||||
|
QPlainTextEdit *m_gdbInitCommandsPlainTextEdit;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // namespace Internal
|
||||||
} // namespace BareMetal
|
} // namespace BareMetal
|
||||||
|
|
||||||
#endif // BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H
|
#endif // BAREMETALDEVICECONFIGURATIONWIZARDPAGES_H
|
||||||
|
|||||||
@@ -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>
|
|
||||||
@@ -33,7 +33,6 @@
|
|||||||
#include "baremetaldevice.h"
|
#include "baremetaldevice.h"
|
||||||
|
|
||||||
#include <debugger/debuggerplugin.h>
|
#include <debugger/debuggerplugin.h>
|
||||||
#include <debugger/debuggerrunner.h>
|
|
||||||
#include <debugger/debuggerstartparameters.h>
|
#include <debugger/debuggerstartparameters.h>
|
||||||
#include <debugger/debuggerkitinformation.h>
|
#include <debugger/debuggerkitinformation.h>
|
||||||
#include <projectexplorer/buildsteplist.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.remoteChannel = device->sshParameters().host + QLatin1String(":") + QString::number(device->sshParameters().port);
|
||||||
params.remoteSetupNeeded = false; // qml stuff, not needed
|
params.remoteSetupNeeded = false; // qml stuff, not needed
|
||||||
params.commandsAfterConnect = device->gdbInitCommands().toLatin1();
|
params.commandsAfterConnect = device->gdbInitCommands().toLatin1();
|
||||||
|
params.commandsForReset = device->gdbResetCommands().toLatin1();
|
||||||
BuildConfiguration *bc = target->activeBuildConfiguration();
|
BuildConfiguration *bc = target->activeBuildConfiguration();
|
||||||
BuildStepList *bsl = bc->stepList(BareMetalGdbCommandsDeployStep::stepId());
|
BuildStepList *bsl = bc->stepList(BareMetalGdbCommandsDeployStep::stepId());
|
||||||
if (bsl) {
|
if (bsl) {
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#include <projectexplorer/runconfiguration.h>
|
#include <projectexplorer/runconfiguration.h>
|
||||||
#include <debugger/debuggerstartparameters.h>
|
#include <debugger/debuggerstartparameters.h>
|
||||||
|
#include <debugger/debuggerrunner.h>
|
||||||
|
|
||||||
namespace BareMetal {
|
namespace BareMetal {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|||||||
@@ -36,5 +36,7 @@
|
|||||||
<file>images/qml/select.png</file>
|
<file>images/qml/select.png</file>
|
||||||
<file>images/qml/app-on-top.png</file>
|
<file>images/qml/app-on-top.png</file>
|
||||||
<file>images/qml/apply-on-save.png</file>
|
<file>images/qml/apply-on-save.png</file>
|
||||||
|
<file>images/debugger_restart.png</file>
|
||||||
|
<file>images/debugger_restart_small.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ const char STEP[] = "Debugger.StepLine";
|
|||||||
const char STEPOUT[] = "Debugger.StepOut";
|
const char STEPOUT[] = "Debugger.StepOut";
|
||||||
const char NEXT[] = "Debugger.NextLine";
|
const char NEXT[] = "Debugger.NextLine";
|
||||||
const char REVERSE[] = "Debugger.ReverseDirection";
|
const char REVERSE[] = "Debugger.ReverseDirection";
|
||||||
|
const char RESET[] = "Debugger.Reset";
|
||||||
const char OPERATE_BY_INSTRUCTION[] = "Debugger.OperateByInstruction";
|
const char OPERATE_BY_INSTRUCTION[] = "Debugger.OperateByInstruction";
|
||||||
const char QML_SHOW_APP_ON_TOP[] = "Debugger.QmlShowAppOnTop";
|
const char QML_SHOW_APP_ON_TOP[] = "Debugger.QmlShowAppOnTop";
|
||||||
const char QML_UPDATE_ON_SAVE[] = "Debugger.QmlUpdateOnSave";
|
const char QML_UPDATE_ON_SAVE[] = "Debugger.QmlUpdateOnSave";
|
||||||
@@ -162,7 +163,8 @@ enum DebuggerCapabilities
|
|||||||
MemoryAddressCapability = 0x1000000,
|
MemoryAddressCapability = 0x1000000,
|
||||||
ShowModuleSectionsCapability = 0x200000,
|
ShowModuleSectionsCapability = 0x200000,
|
||||||
WatchComplexExpressionsCapability = 0x400000, // Used to filter out challenges for cdb.
|
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
|
enum LogChannel
|
||||||
|
|||||||
@@ -334,6 +334,7 @@ protected:
|
|||||||
virtual void runEngine() = 0;
|
virtual void runEngine() = 0;
|
||||||
virtual void shutdownInferior() = 0;
|
virtual void shutdownInferior() = 0;
|
||||||
virtual void shutdownEngine() = 0;
|
virtual void shutdownEngine() = 0;
|
||||||
|
virtual void resetInferior() {}
|
||||||
|
|
||||||
virtual void detachDebugger();
|
virtual void detachDebugger();
|
||||||
virtual void exitDebugger();
|
virtual void exitDebugger();
|
||||||
|
|||||||
@@ -1004,6 +1004,12 @@ public slots:
|
|||||||
currentEngine()->abortDebugger();
|
currentEngine()->abortDebugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handleReset()
|
||||||
|
{
|
||||||
|
currentEngine()->resetLocation();
|
||||||
|
currentEngine()->resetInferior();
|
||||||
|
}
|
||||||
|
|
||||||
void handleExecStep()
|
void handleExecStep()
|
||||||
{
|
{
|
||||||
if (currentEngine()->state() == DebuggerNotReady) {
|
if (currentEngine()->state() == DebuggerNotReady) {
|
||||||
@@ -1250,6 +1256,7 @@ public:
|
|||||||
QAction *m_reverseDirectionAction;
|
QAction *m_reverseDirectionAction;
|
||||||
QAction *m_frameUpAction;
|
QAction *m_frameUpAction;
|
||||||
QAction *m_frameDownAction;
|
QAction *m_frameDownAction;
|
||||||
|
QAction *m_resetAction;
|
||||||
|
|
||||||
QToolButton *m_reverseToolButton;
|
QToolButton *m_reverseToolButton;
|
||||||
|
|
||||||
@@ -1258,6 +1265,7 @@ public:
|
|||||||
QIcon m_continueIcon;
|
QIcon m_continueIcon;
|
||||||
QIcon m_interruptIcon;
|
QIcon m_interruptIcon;
|
||||||
QIcon m_locationMarkIcon;
|
QIcon m_locationMarkIcon;
|
||||||
|
QIcon m_resetIcon;
|
||||||
|
|
||||||
StatusLabel *m_statusLabel;
|
StatusLabel *m_statusLabel;
|
||||||
QComboBox *m_threadBox;
|
QComboBox *m_threadBox;
|
||||||
@@ -2247,6 +2255,7 @@ void DebuggerPluginPrivate::setInitialState()
|
|||||||
|
|
||||||
m_exitAction->setEnabled(false);
|
m_exitAction->setEnabled(false);
|
||||||
m_abortAction->setEnabled(false);
|
m_abortAction->setEnabled(false);
|
||||||
|
m_resetAction->setEnabled(false);
|
||||||
|
|
||||||
m_interruptAction->setEnabled(false);
|
m_interruptAction->setEnabled(false);
|
||||||
m_continueAction->setEnabled(false);
|
m_continueAction->setEnabled(false);
|
||||||
@@ -2386,6 +2395,8 @@ void DebuggerPluginPrivate::updateState(DebuggerEngine *engine)
|
|||||||
|
|
||||||
m_abortAction->setEnabled(state != DebuggerNotReady
|
m_abortAction->setEnabled(state != DebuggerNotReady
|
||||||
&& state != DebuggerFinished);
|
&& state != DebuggerFinished);
|
||||||
|
m_resetAction->setEnabled((stopped || state == DebuggerNotReady)
|
||||||
|
&& engine->hasCapability(ResetInferiorCapability));
|
||||||
|
|
||||||
m_stepAction->setEnabled(stopped || state == DebuggerNotReady);
|
m_stepAction->setEnabled(stopped || state == DebuggerNotReady);
|
||||||
m_nextAction->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 = QIcon(_(Core::Constants::ICON_PAUSE));
|
||||||
m_interruptIcon.addFile(QLatin1String(":/debugger/images/debugger_interrupt.png"));
|
m_interruptIcon.addFile(QLatin1String(":/debugger/images/debugger_interrupt.png"));
|
||||||
m_locationMarkIcon = QIcon(_(":/debugger/images/location_16.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;
|
m_busy = false;
|
||||||
|
|
||||||
@@ -2849,6 +2862,11 @@ void DebuggerPluginPrivate::extensionsInitialized()
|
|||||||
"resets the debugger to the initial state."));
|
"resets the debugger to the initial state."));
|
||||||
connect(act, SIGNAL(triggered()), SLOT(handleAbort()));
|
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 = m_nextAction = new QAction(tr("Step Over"), this);
|
||||||
act->setIcon(QIcon(QLatin1String(":/debugger/images/debugger_stepover_small.png")));
|
act->setIcon(QIcon(QLatin1String(":/debugger/images/debugger_stepover_small.png")));
|
||||||
connect(act, SIGNAL(triggered()), SLOT(handleExecNext()));
|
connect(act, SIGNAL(triggered()), SLOT(handleExecNext()));
|
||||||
@@ -3098,6 +3116,12 @@ void DebuggerPluginPrivate::extensionsInitialized()
|
|||||||
cmd->setDescription(tr("Reset Debugger"));
|
cmd->setDescription(tr("Reset Debugger"));
|
||||||
debugMenu->addAction(cmd, CC::G_DEFAULT_ONE);
|
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);
|
debugMenu->addSeparator(globalcontext);
|
||||||
|
|
||||||
cmd = ActionManager::registerAction(m_nextAction,
|
cmd = ActionManager::registerAction(m_nextAction,
|
||||||
@@ -3310,6 +3334,7 @@ void DebuggerPluginPrivate::extensionsInitialized()
|
|||||||
hbox->addWidget(toolButton(Constants::NEXT));
|
hbox->addWidget(toolButton(Constants::NEXT));
|
||||||
hbox->addWidget(toolButton(Constants::STEP));
|
hbox->addWidget(toolButton(Constants::STEP));
|
||||||
hbox->addWidget(toolButton(Constants::STEPOUT));
|
hbox->addWidget(toolButton(Constants::STEPOUT));
|
||||||
|
hbox->addWidget(toolButton(Constants::RESET));
|
||||||
hbox->addWidget(toolButton(Constants::OPERATE_BY_INSTRUCTION));
|
hbox->addWidget(toolButton(Constants::OPERATE_BY_INSTRUCTION));
|
||||||
|
|
||||||
//hbox->addWidget(new StyledSeparator);
|
//hbox->addWidget(new StyledSeparator);
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ public:
|
|||||||
QMap<QString, QString> sourcePathMap;
|
QMap<QString, QString> sourcePathMap;
|
||||||
|
|
||||||
// Used by baremetal plugin
|
// 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
|
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
|
QByteArray commandsAfterConnect; // additional commands to post after connection to debug target
|
||||||
|
|
||||||
|
|||||||
@@ -1213,6 +1213,7 @@ void GdbEngine::handleResultRecord(GdbResponse *response)
|
|||||||
showMessage(_("ALL COMMANDS DONE; INVOKING CALLBACK"));
|
showMessage(_("ALL COMMANDS DONE; INVOKING CALLBACK"));
|
||||||
CommandsDoneCallback cont = m_commandsDoneCallback;
|
CommandsDoneCallback cont = m_commandsDoneCallback;
|
||||||
m_commandsDoneCallback = 0;
|
m_commandsDoneCallback = 0;
|
||||||
|
if (response->resultClass != GdbResultRunning) //only start if the thing is not already running
|
||||||
(this->*cont)();
|
(this->*cont)();
|
||||||
} else {
|
} else {
|
||||||
PENDING_DEBUG("MISSING TOKENS: " << m_cookieForToken.keys());
|
PENDING_DEBUG("MISSING TOKENS: " << m_cookieForToken.keys());
|
||||||
@@ -2028,7 +2029,8 @@ bool GdbEngine::hasCapability(unsigned cap) const
|
|||||||
| RunToLineCapability
|
| RunToLineCapability
|
||||||
| WatchComplexExpressionsCapability
|
| WatchComplexExpressionsCapability
|
||||||
| MemoryAddressCapability
|
| MemoryAddressCapability
|
||||||
| AdditionalQmlStackCapability))
|
| AdditionalQmlStackCapability
|
||||||
|
| ResetInferiorCapability))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (startParameters().startMode == AttachCore)
|
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)
|
void GdbEngine::handleAdapterStartFailed(const QString &msg, Id settingsIdHint)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
|
QTC_ASSERT(state() == EngineSetupRequested, qDebug() << state());
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ private: ////////// General Interface //////////
|
|||||||
virtual void shutdownInferior();
|
virtual void shutdownInferior();
|
||||||
virtual void shutdownEngine() = 0;
|
virtual void shutdownEngine() = 0;
|
||||||
virtual void abortDebugger();
|
virtual void abortDebugger();
|
||||||
|
virtual void resetInferior();
|
||||||
|
|
||||||
virtual bool acceptsDebuggerCommands() const;
|
virtual bool acceptsDebuggerCommands() const;
|
||||||
virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages);
|
virtual void executeDebuggerCommand(const QString &command, DebuggerLanguages languages);
|
||||||
|
|||||||
@@ -406,7 +406,7 @@ void GdbRemoteServerEngine::runEngine()
|
|||||||
{
|
{
|
||||||
QTC_ASSERT(state() == EngineRunRequested, qDebug() << state());
|
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()) {
|
if (!remoteExecutable.isEmpty()) {
|
||||||
postCommand("-exec-run", GdbEngine::RunRequest, CB(handleExecRun));
|
postCommand("-exec-run", GdbEngine::RunRequest, CB(handleExecRun));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
BIN
src/plugins/debugger/images/debugger_restart.png
Normal file
BIN
src/plugins/debugger/images/debugger_restart.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
77
src/plugins/debugger/images/debugger_restart.svg
Normal file
77
src/plugins/debugger/images/debugger_restart.svg
Normal file
@@ -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>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
BIN
src/plugins/debugger/images/debugger_restart_small.png
Normal file
BIN
src/plugins/debugger/images/debugger_restart_small.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 675 B |
@@ -104,6 +104,7 @@ DebuggerStartParameters LinuxDeviceDebugSupport::startParameters(const AbstractR
|
|||||||
params.startMode = AttachToRemoteServer;
|
params.startMode = AttachToRemoteServer;
|
||||||
params.executable = runConfig->localExecutableFilePath();
|
params.executable = runConfig->localExecutableFilePath();
|
||||||
params.remoteChannel = device->sshParameters().host + QLatin1String(":-1");
|
params.remoteChannel = device->sshParameters().host + QLatin1String(":-1");
|
||||||
|
params.remoteExecutable = runConfig->remoteExecutableFilePath();
|
||||||
} else {
|
} else {
|
||||||
params.startMode = AttachToRemoteServer;
|
params.startMode = AttachToRemoteServer;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user