diff --git a/src/SeerConfigDialog.cpp b/src/SeerConfigDialog.cpp index 32ccda5..ebb529f 100644 --- a/src/SeerConfigDialog.cpp +++ b/src/SeerConfigDialog.cpp @@ -28,9 +28,6 @@ SeerConfigDialog::SeerConfigDialog(QWidget* parent) : QDialog(parent) { pagesStackedWidget->addWidget(_sourceConfigPage); pagesStackedWidget->addWidget(_seerConfigPage); - _gdbConfigPage->gdbProgramLineEdit->setText("/usr/bin/gdb"); - _gdbConfigPage->gdbArgumentsLineEdit->setText("--interpreter=mi"); - // Create icons. QListWidgetItem* configGdbButton = new QListWidgetItem(contentsListWidget); configGdbButton->setIcon(QIcon(":/seer/resources/gdb.png")); @@ -77,3 +74,33 @@ void SeerConfigDialog::changePage(QListWidgetItem* current, QListWidgetItem* pre pagesStackedWidget->setCurrentIndex(contentsListWidget->row(current)); } +QString SeerConfigDialog::gdbProgram () const { + + return _gdbConfigPage->gdbProgram(); +} + +QString SeerConfigDialog::gdbArguments () const { + + return _gdbConfigPage->gdbArguments(); +} + +bool SeerConfigDialog::gdbAsyncMode () const { + + return _gdbConfigPage->gdbAsyncMode(); +} + +void SeerConfigDialog::setGdbProgram (const QString& program) { + + _gdbConfigPage->setGdbProgram(program); +} + +void SeerConfigDialog::setGdbArguments (const QString& arguments) { + + _gdbConfigPage->setGdbArguments(arguments); +} + +void SeerConfigDialog::setGdbAsyncMode (bool flag) { + + _gdbConfigPage->setGdbAsyncMode(flag); +} + diff --git a/src/SeerConfigDialog.h b/src/SeerConfigDialog.h index d5a2fee..4f4074d 100644 --- a/src/SeerConfigDialog.h +++ b/src/SeerConfigDialog.h @@ -21,6 +21,15 @@ class SeerConfigDialog : public QDialog, protected Ui::SeerConfigDialogForm { explicit SeerConfigDialog (QWidget* parent = 0); ~SeerConfigDialog (); + // Gdb settings. + QString gdbProgram () const; + QString gdbArguments () const; + bool gdbAsyncMode () const; + + void setGdbProgram (const QString& program); + void setGdbArguments (const QString& arguments); + void setGdbAsyncMode (bool flag); + public slots: void changePage (QListWidgetItem* current, QListWidgetItem* previous); diff --git a/src/SeerEditorConfigPage.cpp b/src/SeerEditorConfigPage.cpp index 388f1e7..1e9ede2 100644 --- a/src/SeerEditorConfigPage.cpp +++ b/src/SeerEditorConfigPage.cpp @@ -1,6 +1,5 @@ -#include - #include "SeerEditorConfigPage.h" +#include SeerEditorConfigPage::SeerEditorConfigPage(QWidget* parent) : QWidget(parent) { diff --git a/src/SeerGdbConfigPage.cpp b/src/SeerGdbConfigPage.cpp index a43ef66..826de66 100644 --- a/src/SeerGdbConfigPage.cpp +++ b/src/SeerGdbConfigPage.cpp @@ -1,6 +1,6 @@ -#include - #include "SeerGdbConfigPage.h" +#include +#include SeerGdbConfigPage::SeerGdbConfigPage(QWidget* parent) : QWidget(parent) { @@ -10,8 +10,48 @@ SeerGdbConfigPage::SeerGdbConfigPage(QWidget* parent) : QWidget(parent) { // Setup the widgets // Connect things. + QObject::connect(gdbProgramToolButton, &QToolButton::clicked, this, &SeerGdbConfigPage::handleGdbProgramToolButton); } SeerGdbConfigPage::~SeerGdbConfigPage() { } +QString SeerGdbConfigPage::gdbProgram () const { + + return gdbProgramLineEdit->text(); +} + +QString SeerGdbConfigPage::gdbArguments () const { + + return gdbArgumentsLineEdit->text(); +} + +bool SeerGdbConfigPage::gdbAsyncMode () const { + + return gdbAsyncModeCheckBox->isChecked(); +} + +void SeerGdbConfigPage::setGdbProgram (const QString& program) { + + gdbProgramLineEdit->setText(program); +} + +void SeerGdbConfigPage::setGdbArguments (const QString& arguments) { + + gdbArgumentsLineEdit->setText(arguments); +} + +void SeerGdbConfigPage::setGdbAsyncMode (bool flag) { + + gdbAsyncModeCheckBox->setChecked(flag); +} + +void SeerGdbConfigPage::handleGdbProgramToolButton () { + + QString program = QFileDialog::getOpenFileName(this, "Select a gdb program to use as the debugger.", gdbProgram()); + + if (program != "") { + setGdbProgram(program); + } +} + diff --git a/src/SeerGdbConfigPage.h b/src/SeerGdbConfigPage.h index f3ffb85..b3789d0 100644 --- a/src/SeerGdbConfigPage.h +++ b/src/SeerGdbConfigPage.h @@ -4,7 +4,7 @@ #include "ui_SeerGdbConfigPage.h" -class SeerGdbConfigPage : public QWidget, public Ui::SeerGdbConfigPage { +class SeerGdbConfigPage : public QWidget, protected Ui::SeerGdbConfigPage { Q_OBJECT @@ -12,5 +12,15 @@ class SeerGdbConfigPage : public QWidget, public Ui::SeerGdbConfigPage { explicit SeerGdbConfigPage (QWidget* parent = 0); ~SeerGdbConfigPage (); + QString gdbProgram () const; + QString gdbArguments () const; + bool gdbAsyncMode () const; + + void setGdbProgram (const QString& program); + void setGdbArguments (const QString& arguments); + void setGdbAsyncMode (bool flag); + + protected slots: + void handleGdbProgramToolButton (); }; diff --git a/src/SeerGdbConfigPage.ui b/src/SeerGdbConfigPage.ui index 8b179c6..89ed782 100644 --- a/src/SeerGdbConfigPage.ui +++ b/src/SeerGdbConfigPage.ui @@ -24,17 +24,6 @@ - - - - - - - - .. - - - @@ -68,6 +57,17 @@ p, li { white-space: pre-wrap; } + + + + + + + + .. + + + diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index 62d7102..15a042c 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -28,6 +28,9 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { _watchpointsBrowserWidget = 0; _gdbOutputLog = 0; _seerOutputLog = 0; + _gdbProgram = "/usr/bin/gdb"; + _gdbArguments = "--interpreter=mi"; + _gdbASyncMode = true; setNewExecutableFlag(true); @@ -259,6 +262,36 @@ const QString& SeerGdbWidget::executableLaunchMode () const { return _executableLaunchMode; } +void SeerGdbWidget::setGdbProgram (const QString& program) { + + _gdbProgram = program; +} + +QString SeerGdbWidget::gdbProgram () const { + + return _gdbProgram; +} + +void SeerGdbWidget::setGdbArguments (const QString& arguments) { + + _gdbArguments = arguments; +} + +QString SeerGdbWidget::gdbArguments () const { + + return _gdbArguments; +} + +void SeerGdbWidget::setGdbAsyncMode (bool flag) { + + _gdbASyncMode = flag; +} + +bool SeerGdbWidget::gdbAsyncMode () const { + + return _gdbASyncMode; +} + void SeerGdbWidget::handleText (const QString& text) { if (text.startsWith("*running,thread-id=\"all\"")) { @@ -380,7 +413,10 @@ void SeerGdbWidget::handleGdbRunExecutable () { // If gdb isn't running, start it. if (isGdbRuning() == false) { startGdb(); - handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + + if (gdbAsyncMode()) { + handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + } } // Create a new console. @@ -444,7 +480,10 @@ void SeerGdbWidget::handleGdbStartExecutable () { // If gdb isn't running, start it. if (isGdbRuning() == false) { startGdb(); - handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + + if (gdbAsyncMode()) { + handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + } } // Create a new console. @@ -498,7 +537,10 @@ void SeerGdbWidget::handleGdbAttachExecutable () { // If gdb isn't running, start it. if (isGdbRuning() == false) { startGdb(); - handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + + if (gdbAsyncMode()) { + handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + } } // Create a new console. @@ -535,7 +577,10 @@ void SeerGdbWidget::handleGdbConnectExecutable () { // If gdb isn't running, start it. if (isGdbRuning() == false) { startGdb(); - handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + + if (gdbAsyncMode()) { + handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + } } // Create a new console. @@ -579,7 +624,10 @@ void SeerGdbWidget::handleGdbCoreFileExecutable () { // If gdb isn't running, start it. if (isGdbRuning() == false) { startGdb(); - handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + + if (gdbAsyncMode()) { + handleGdbCommand("-gdb-set mi-async on"); // Turn on async mode so the 'interrupt' can happen. + } } // Create a new console. @@ -1173,13 +1221,13 @@ void SeerGdbWidget::startGdb () { // Build the gdb argument list. QStringList args; - args << "--interpreter=mi"; + args << gdbArguments(); // Give the gdb process the argument list. _gdbProcess->setArguments(args); // Set the gdb program name to use. - _gdbProcess->setProgram("/usr/bin/gdb"); + _gdbProcess->setProgram(gdbProgram()); // Start the gdb process. _gdbProcess->start(); diff --git a/src/SeerGdbWidget.h b/src/SeerGdbWidget.h index 7b17b33..d420b41 100644 --- a/src/SeerGdbWidget.h +++ b/src/SeerGdbWidget.h @@ -47,6 +47,16 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { void setExecutableLaunchMode (const QString& launchMode); const QString& executableLaunchMode () const; + // Gdb settings. + void setGdbProgram (const QString& program); + QString gdbProgram () const; + + void setGdbArguments (const QString& arguments); + QString gdbArguments () const; + + void setGdbAsyncMode (bool flag); + bool gdbAsyncMode () const; + public slots: void handleText (const QString& text); void handleExecute (); @@ -124,6 +134,9 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { void sendGdbInterrupt (int signal); + QString _gdbProgram; + QString _gdbArguments; + bool _gdbASyncMode; QString _executableName; QString _executableArguments; QString _executableWorkingDirectory; diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index 6fab152..baed2eb 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -263,15 +263,9 @@ void SeerMainWindow::handleSettingsConfiguration () { SeerConfigDialog dlg(this); - /* - dlg.setExecutableName(executableName()); - dlg.setExecutableWorkingDirectory(executableWorkingDirectory()); - dlg.setExecutableArguments(executableArguments()); - dlg.setAttachPid(executablePid()); - dlg.setConnectHostPort(executableHostPort()); - dlg.setCoreFilename(executableCoreFilename()); - dlg.setLaunchMode(executableLaunchMode()); - */ + dlg.setGdbProgram(centralwidget->gdbProgram()); + dlg.setGdbArguments(centralwidget->gdbArguments()); + dlg.setGdbAsyncMode(centralwidget->gdbAsyncMode()); int ret = dlg.exec(); @@ -279,22 +273,9 @@ void SeerMainWindow::handleSettingsConfiguration () { return; } - /* - QString launchMode = dlg.launchMode(); - - if (launchMode == "") { - return; - } - - setExecutableName(dlg.executableName()); - setExecutableWorkingDirectory(dlg.executableWorkingDirectory()); - setExecutableArguments(dlg.executableArguments()); - setExecutablePid(dlg.attachPid()); - setExecutableHostPort(dlg.connectHostPort()); - setExecutableCoreFilename(dlg.coreFilename()); - - launchExecutable(launchMode); - */ + centralwidget->setGdbProgram(dlg.gdbProgram()); + centralwidget->setGdbArguments(dlg.gdbArguments()); + centralwidget->setGdbAsyncMode(dlg.gdbAsyncMode()); } void SeerMainWindow::handleHelpAbout () { diff --git a/src/SeerSeerConfigPage.cpp b/src/SeerSeerConfigPage.cpp index ef2cb28..d0cdc6c 100644 --- a/src/SeerSeerConfigPage.cpp +++ b/src/SeerSeerConfigPage.cpp @@ -1,6 +1,5 @@ -#include - #include "SeerSeerConfigPage.h" +#include SeerSeerConfigPage::SeerSeerConfigPage(QWidget* parent) : QWidget(parent) { diff --git a/src/SeerSourceConfigPage.cpp b/src/SeerSourceConfigPage.cpp index a235a4a..2ae0614 100644 --- a/src/SeerSourceConfigPage.cpp +++ b/src/SeerSourceConfigPage.cpp @@ -1,6 +1,5 @@ -#include - #include "SeerSourceConfigPage.h" +#include SeerSourceConfigPage::SeerSourceConfigPage(QWidget* parent) : QWidget(parent) {