diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index 155ee8f..90673bc 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -304,6 +304,7 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { QObject::connect(variableManagerWidget->registerValuesBrowserWidget(), &SeerRegisterValuesBrowserWidget::setRegisterValue, this, &SeerGdbWidget::handleGdbRegisterSetValue); QObject::connect(variableManagerWidget->signalValuesBrowserWidget(), &SeerSignalValuesBrowserWidget::refreshSignalNames, this, &SeerGdbWidget::handleGdbSignalListNames); QObject::connect(variableManagerWidget->signalValuesBrowserWidget(), &SeerSignalValuesBrowserWidget::refreshSignalValues, this, &SeerGdbWidget::handleGdbSignalListValues); + QObject::connect(variableManagerWidget->signalValuesBrowserWidget(), &SeerSignalValuesBrowserWidget::setSignalValue, this, &SeerGdbWidget::handleGdbSignalSetValue); QObject::connect(threadManagerWidget->threadFramesBrowserWidget(), &SeerThreadFramesBrowserWidget::refreshThreadIds, this, &SeerGdbWidget::handleGdbThreadListIds); QObject::connect(threadManagerWidget->threadFramesBrowserWidget(), &SeerThreadFramesBrowserWidget::refreshThreadFrames, this, &SeerGdbWidget::handleGdbThreadListFrames); @@ -2800,6 +2801,19 @@ void SeerGdbWidget::handleGdbSignalListValues (QString names) { handleGdbCommand("-signal-list-values " + names); } +void SeerGdbWidget::handleGdbSignalSetValue (QString name, QString stop, QString print, QString pass) { + + if (executableLaunchMode() == "") { + return; + } + + // Set the signal value. + handleGdbCommand("-signal-set-value " + name + " " + stop + " " + print + " " + pass); + + // Refresh whoever is listening. + handleGdbSignalListValues(""); +} + void SeerGdbWidget::handleGdbDataEvaluateExpression (int expressionid, QString expression) { if (executableLaunchMode() == "") { diff --git a/src/SeerGdbWidget.h b/src/SeerGdbWidget.h index d67ab81..d7a0bef 100644 --- a/src/SeerGdbWidget.h +++ b/src/SeerGdbWidget.h @@ -342,6 +342,7 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { void handleGdbRegisterSetValue (QString fmt, QString name, QString value); void handleGdbSignalListNames (); void handleGdbSignalListValues (QString names); + void handleGdbSignalSetValue (QString name, QString stop, QString print, QString pass); void handleGdbDataEvaluateExpression (int expressionid, QString expression); void handleGdbVarObjCreate (int expressionid, QString expression); void handleGdbVarObjListChildren (int expressionid, QString objname); diff --git a/src/SeerSignalEditValueDialog.cpp b/src/SeerSignalEditValueDialog.cpp index 3869c27..341cdb4 100644 --- a/src/SeerSignalEditValueDialog.cpp +++ b/src/SeerSignalEditValueDialog.cpp @@ -22,7 +22,7 @@ SeerSignalEditValueDialog::~SeerSignalEditValueDialog () { void SeerSignalEditValueDialog::set (const QString& signame, const QString& stopvalue, const QString& printvalue, const QString& passvalue, const QString& description) { signalNameLineEdit->setText(signame); - signalDescriptionLabel->setText(description); + signalDescriptionLineEdit->setText(description); signalStopCheckBox->setCheckState(Qt::Unchecked); signalPrintCheckBox->setCheckState(Qt::Unchecked); @@ -75,6 +75,6 @@ QString SeerSignalEditValueDialog::passText () const { QString SeerSignalEditValueDialog::descriptionText () const { - return signalDescriptionLabel->text(); + return signalDescriptionLineEdit->text(); } diff --git a/src/SeerSignalEditValueDialog.ui b/src/SeerSignalEditValueDialog.ui index f77d713..08f3f76 100644 --- a/src/SeerSignalEditValueDialog.ui +++ b/src/SeerSignalEditValueDialog.ui @@ -6,8 +6,8 @@ 0 0 - 527 - 167 + 523 + 173 @@ -25,79 +25,115 @@ - - - - - - - Name - - - - - - - - 50 - 0 - - - - The name of the register to edit. - - - true - - - false - - - - - - - Stop - - - - - - - Print - - - - - - - Pass - - - - - - - Qt::Horizontal - - - - 100 - 20 - - - - - - - - - - - - - - + + + Name + + + + + + + + 100 + 0 + + + + The name of the signal to edit. + + + true + + + false + + + + + + + Stop your program if GDB sees this signal. + + + Stop + + + + + + + Print a message to the "GDB output" tab if GDB sees this signal. + + + Print + + + + + + + Pass this signal to your program if GDB sees this signal. + + + Pass + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 60 + 20 + + + + + + + + Description + + + + + + + + 50 + 0 + + + + The description of the signal. + + + true + + + false + + + + + + + Qt::Vertical + + + + 20 + 11 + + + diff --git a/src/resources/mi-python/MISignals.py b/src/resources/mi-python/MISignals.py index 75a1d34..2b0f0eb 100644 --- a/src/resources/mi-python/MISignals.py +++ b/src/resources/mi-python/MISignals.py @@ -96,11 +96,13 @@ class MISignal(gdb.MICommand): elif self._mode == "stop": + # handle signal [ signal … ] stop gdb.execute ("handle " + " ".join(argv) + " stop", from_tty=True, to_string=True) return None elif self._mode == "nostop": + # handle signal [ signal … ] nostop gdb.execute ("handle " + " ".join(argv) + " nostop", from_tty=True, to_string=True) return None @@ -124,6 +126,12 @@ class MISignal(gdb.MICommand): gdb.execute ("handle " + " ".join(argv) + " nopass", from_tty=True, to_string=True) return None + elif self._mode == "set-value": + + # handle signal [ signal … ] [keywords…] + gdb.execute ("handle " + " ".join(argv), from_tty=True, to_string=True) + return None + else: raise gdb.GdbError("signal: Invalid parameter: %s" % self._mode) @@ -135,4 +143,5 @@ MISignal("-signal-print", "print") MISignal("-signal-noprint", "noprint") MISignal("-signal-pass", "pass") MISignal("-signal-nopass", "nopass") +MISignal("-signal-set-value", "set-value")