diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index 69946d5..3cf3644 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -173,6 +173,7 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { QObject::connect(_gdbMonitor, &GdbMonitor::caretTextOutput, sourceLibraryManagerWidget->staticBrowserWidget(), &SeerStaticBrowserWidget::handleText); QObject::connect(_gdbMonitor, &GdbMonitor::caretTextOutput, sourceLibraryManagerWidget->libraryBrowserWidget(), &SeerLibraryBrowserWidget::handleText); QObject::connect(_gdbMonitor, &GdbMonitor::caretTextOutput, sourceLibraryManagerWidget->adaExceptionsBrowserWidget(), &SeerAdaExceptionsBrowserWidget::handleText); + QObject::connect(_gdbMonitor, &GdbMonitor::caretTextOutput, sourceLibraryManagerWidget->skipBrowserWidget(), &SeerSkipBrowserWidget::handleText); QObject::connect(_gdbMonitor, &GdbMonitor::caretTextOutput, stackManagerWidget->stackFramesBrowserWidget(), &SeerStackFramesBrowserWidget::handleText); QObject::connect(_gdbMonitor, &GdbMonitor::caretTextOutput, stackManagerWidget->stackLocalsBrowserWidget(), &SeerStackLocalsBrowserWidget::handleText); QObject::connect(_gdbMonitor, &GdbMonitor::caretTextOutput, stackManagerWidget->stackArgumentsBrowserWidget(), &SeerStackArgumentsBrowserWidget::handleText); @@ -229,6 +230,10 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { QObject::connect(sourceLibraryManagerWidget->libraryBrowserWidget(), &SeerLibraryBrowserWidget::refreshLibraryList, this, &SeerGdbWidget::handleGdbExecutableLibraries); QObject::connect(sourceLibraryManagerWidget->adaExceptionsBrowserWidget(), &SeerAdaExceptionsBrowserWidget::refreshAdaExceptions, this, &SeerGdbWidget::handleGdbAdaListExceptions); QObject::connect(sourceLibraryManagerWidget->adaExceptionsBrowserWidget(), &SeerAdaExceptionsBrowserWidget::insertCatchpoint, this, &SeerGdbWidget::handleGdbCatchpointInsert); + QObject::connect(sourceLibraryManagerWidget->skipBrowserWidget(), &SeerSkipBrowserWidget::refreshSkipList, this, &SeerGdbWidget::handleGdbListSkips); + QObject::connect(sourceLibraryManagerWidget->skipBrowserWidget(), &SeerSkipBrowserWidget::deleteSkips, this, &SeerGdbWidget::handleGdbDeleteSkips); + QObject::connect(sourceLibraryManagerWidget->skipBrowserWidget(), &SeerSkipBrowserWidget::enableSkips, this, &SeerGdbWidget::handleGdbEnableSkips); + QObject::connect(sourceLibraryManagerWidget->skipBrowserWidget(), &SeerSkipBrowserWidget::disableSkips, this, &SeerGdbWidget::handleGdbDisableSkips); QObject::connect(stackManagerWidget->stackFramesBrowserWidget(), &SeerStackFramesBrowserWidget::refreshStackFrames, this, &SeerGdbWidget::handleGdbStackListFrames); QObject::connect(stackManagerWidget->stackFramesBrowserWidget(), &SeerStackFramesBrowserWidget::selectedFrame, this, &SeerGdbWidget::handleGdbStackSelectFrame); @@ -2296,6 +2301,48 @@ void SeerGdbWidget::handleGdbAdaListExceptions () { handleGdbCommand("-info-ada-exceptions"); } +void SeerGdbWidget::handleGdbListSkips () { + + if (executableLaunchMode() == "") { + return; + } + + handleGdbCommand("-skip-list"); +} + +void SeerGdbWidget::handleGdbDeleteSkips (QString skipids) { + + if (executableLaunchMode() == "") { + return; + } + + handleGdbCommand("-skip-delete " + skipids); + + handleGdbListSkips(); +} + +void SeerGdbWidget::handleGdbEnableSkips (QString skipids) { + + if (executableLaunchMode() == "") { + return; + } + + handleGdbCommand("-skip-enable " + skipids); + + handleGdbListSkips(); +} + +void SeerGdbWidget::handleGdbDisableSkips (QString skipids) { + + if (executableLaunchMode() == "") { + return; + } + + handleGdbCommand("-skip-disable " + skipids); + + handleGdbListSkips(); +} + void SeerGdbWidget::handleGdbRegisterListNames () { if (executableLaunchMode() == "") { diff --git a/src/SeerGdbWidget.h b/src/SeerGdbWidget.h index 2cb0715..a097772 100644 --- a/src/SeerGdbWidget.h +++ b/src/SeerGdbWidget.h @@ -299,6 +299,10 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { void handleGdbThreadSelectId (int threadid); void handleGdbAdaListTasks (); void handleGdbAdaListExceptions (); + void handleGdbListSkips (); + void handleGdbDeleteSkips (QString skipids); + void handleGdbEnableSkips (QString skipids); + void handleGdbDisableSkips (QString skipids); void handleGdbRegisterListNames (); void handleGdbRegisterListValues (QString fmt); void handleGdbRegisterSetValue (QString fmt, QString name, QString value); diff --git a/src/SeerSkipBrowserWidget.cpp b/src/SeerSkipBrowserWidget.cpp index afeafcf..6bb534e 100644 --- a/src/SeerSkipBrowserWidget.cpp +++ b/src/SeerSkipBrowserWidget.cpp @@ -11,9 +11,6 @@ SeerSkipBrowserWidget::SeerSkipBrowserWidget (QWidget* parent) : QWidget(parent) { - // Set the state. - _id = Seer::createID(); - // Construct the UI. setupUi(this); @@ -29,6 +26,9 @@ SeerSkipBrowserWidget::SeerSkipBrowserWidget (QWidget* parent) : QWidget(parent) skipTreeWidget->setSortingEnabled(false); // Connect things. + QObject::connect(skipDeleteToolButton, &QToolButton::clicked, this, &SeerSkipBrowserWidget::handleDeleteToolButton); + QObject::connect(skipEnableToolButton, &QToolButton::clicked, this, &SeerSkipBrowserWidget::handleEnableToolButton); + QObject::connect(skipDisableToolButton, &QToolButton::clicked, this, &SeerSkipBrowserWidget::handleDisableToolButton); } SeerSkipBrowserWidget::~SeerSkipBrowserWidget () { @@ -38,6 +38,47 @@ void SeerSkipBrowserWidget::handleText (const QString& text) { QApplication::setOverrideCursor(Qt::BusyCursor); + if (text.startsWith("^done,skips=[") && text.endsWith("]")) { + + skipTreeWidget->clear(); + skipTreeWidget->setSortingEnabled(false); + skipTreeWidget->sortByColumn(-1, Qt::AscendingOrder); + + // ^done,skips=[ + // {number="1",enable="y",glob="n",file="",re="n",function="std::vector >::back()"}, + // {number="2",enable="y",glob="n",file="",re="n",function="std::unique_ptr >::operator*() const"} + // ] + + QString skips_text = Seer::parseFirst(text, "skips=", '[', ']', false); + + QStringList skips_list = Seer::parse(skips_text, "", '{', '}', false); + + for (const auto& skip_entry : skips_list) { + + QString number_text = Seer::parseFirst(skip_entry, "number=", '"', '"', false); + QString enable_text = Seer::parseFirst(skip_entry, "enable=", '"', '"', false); + QString glob_text = Seer::parseFirst(skip_entry, "glob=", '"', '"', false); + QString file_text = Seer::parseFirst(skip_entry, "file=", '"', '"', false); + QString re_text = Seer::parseFirst(skip_entry, "re=", '"', '"', false); + QString function_text = Seer::parseFirst(skip_entry, "function=", '"', '"', false); + + // Add the function to the tree. + QTreeWidgetItem* item = new QTreeWidgetItem; + + item->setText(0, number_text); + item->setText(1, enable_text); + item->setText(2, glob_text); + item->setText(3, file_text); + item->setText(4, re_text); + item->setText(5, function_text); + + skipTreeWidget->addTopLevelItem(item); + } + + }else{ + // Ignore others. + } + skipTreeWidget->resizeColumnToContents(0); skipTreeWidget->resizeColumnToContents(1); skipTreeWidget->resizeColumnToContents(2); @@ -48,6 +89,70 @@ void SeerSkipBrowserWidget::handleText (const QString& text) { QApplication::restoreOverrideCursor(); } -void SeerSkipBrowserWidget::refresh () { +void SeerSkipBrowserWidget::handleDeleteToolButton () { + + // Get selected tree items. + QList items = skipTreeWidget->selectedItems(); + + // Build ID list. + QString ids; + + for (int i=0; itext(0); + } + + if (ids == "") return; + + // Send the list of ID's to delete. + emit deleteSkips(ids); +} + +void SeerSkipBrowserWidget::handleEnableToolButton () { + + // Get selected tree items. + QList items = skipTreeWidget->selectedItems(); + + // Build ID list. + QString ids; + + for (int i=0; itext(0); + } + + if (ids == "") return; + + // Send the list of ID's to enable. + emit enableSkips(ids); +} + +void SeerSkipBrowserWidget::handleDisableToolButton () { + + // Get selected tree items. + QList items = skipTreeWidget->selectedItems(); + + // Build ID list. + QString ids; + + for (int i=0; itext(0); + } + + if (ids == "") return; + + // Send the list of ID's to disable. + emit disableSkips(ids); +} + +void SeerSkipBrowserWidget::refresh () { + emit refreshSkipList(); } diff --git a/src/SeerSkipBrowserWidget.h b/src/SeerSkipBrowserWidget.h index 8d76ea0..7c2c167 100644 --- a/src/SeerSkipBrowserWidget.h +++ b/src/SeerSkipBrowserWidget.h @@ -17,11 +17,17 @@ class SeerSkipBrowserWidget : public QWidget, protected Ui::SeerSkipBrowserWidge void refresh (); protected slots: + void handleDeleteToolButton (); + void handleEnableToolButton (); + void handleDisableToolButton (); signals: + void refreshSkipList (); + void deleteSkips (const QString& skips); + void enableSkips (const QString& skips); + void disableSkips (const QString& skips); protected: private: - int _id; }; diff --git a/src/SeerVariableLoggerBrowserWidget.cpp b/src/SeerVariableLoggerBrowserWidget.cpp index 63fe5e3..b69a303 100644 --- a/src/SeerVariableLoggerBrowserWidget.cpp +++ b/src/SeerVariableLoggerBrowserWidget.cpp @@ -169,7 +169,7 @@ void SeerVariableLoggerBrowserWidget::handleDeleteToolButton () { QList items = variablesTreeWidget->selectedItems(); // Remove them. - for(int i=0; i