diff --git a/CHANGELOG.md b/CHANGELOG.md
index 595deeb..be4f7e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@
EditorManager.
* Fixed regression when order of message tabs not being preserved between
sessions.
+* Connect mode to a gdb server now supports 'remote' and 'extended-remote'.
+* Connect mode's 'pre' commands are executed before the 'target connect'.
## [2.5] - 2024-12-24
* Console now supports a subset of ANSI color codes.
diff --git a/src/SeerConfigDialog.cpp b/src/SeerConfigDialog.cpp
index a20adf8..8850b83 100644
--- a/src/SeerConfigDialog.cpp
+++ b/src/SeerConfigDialog.cpp
@@ -230,6 +230,16 @@ bool SeerConfigDialog::gdbEnablePrettyPrinting () const {
return _gdbConfigPage->gdbEnablePrettyPrinting();
}
+void SeerConfigDialog::setGdbRemoteTargetType (const QString& type) {
+
+ _gdbConfigPage->setGdbRemoteTargetType(type);
+}
+
+QString SeerConfigDialog::gdbRemoteTargetType () const {
+
+ return _gdbConfigPage->gdbRemoteTargetType();
+}
+
void SeerConfigDialog::setEditorFont (const QFont& font) {
_editorConfigPage->setEditorFont(font);
diff --git a/src/SeerConfigDialog.h b/src/SeerConfigDialog.h
index 75911de..46000e8 100644
--- a/src/SeerConfigDialog.h
+++ b/src/SeerConfigDialog.h
@@ -61,6 +61,9 @@ class SeerConfigDialog : public QDialog, protected Ui::SeerConfigDialogForm {
void setGdbEnablePrettyPrinting (bool flag);
bool gdbEnablePrettyPrinting () const;
+ void setGdbRemoteTargetType (const QString& type);
+ QString gdbRemoteTargetType () const;
+
// Editor settings.
void setEditorFont (const QFont& font);
const QFont& editorFont () const;
diff --git a/src/SeerDebugDialog.cpp b/src/SeerDebugDialog.cpp
index a0fb154..0642df3 100644
--- a/src/SeerDebugDialog.cpp
+++ b/src/SeerDebugDialog.cpp
@@ -279,6 +279,14 @@ QString SeerDebugDialog::connectHostPort () const {
return connectProgramHostPortLineEdit->text();
}
+void SeerDebugDialog::setConnectRemoteTargetType (const QString& type) {
+ connectRemoteTargetTypeCombo->setCurrentText(type);
+}
+
+QString SeerDebugDialog::connectRemoteTargetType () const {
+ return connectRemoteTargetTypeCombo->currentText();
+}
+
void SeerDebugDialog::setRRTraceDirectory (const QString& rrTraceDirectory) {
rrTraceDirectoryLineEdit->setText(rrTraceDirectory);
}
@@ -611,6 +619,10 @@ void SeerDebugDialog::loadProject (const QString& filename, bool notify) {
connectProgramHostPortLineEdit->setText(connectModeJson["gdbserver"].toString());
+ if (connectModeJson.contains("targettype")) {
+ connectRemoteTargetTypeCombo->setCurrentText(connectModeJson["targettype"].toString());
+ }
+
setLaunchMode("connect");
}
@@ -723,6 +735,7 @@ void SeerDebugDialog::handleSaveProjectToolButton () {
QJsonObject modeJson;
modeJson["gdbserver"] = connectProgramHostPortLineEdit->text();
+ modeJson["targettype"] = connectRemoteTargetTypeCombo->currentText();
seerProjectJson["connectmode"] = modeJson;
}
diff --git a/src/SeerDebugDialog.h b/src/SeerDebugDialog.h
index 6c1fe59..54efaaf 100644
--- a/src/SeerDebugDialog.h
+++ b/src/SeerDebugDialog.h
@@ -54,6 +54,9 @@ class SeerDebugDialog : public QDialog, protected Ui::SeerDebugDialogForm {
// Connectect to a GDB server. "connect".
void setConnectHostPort (const QString& connectHostPort);
QString connectHostPort () const;
+ void setConnectRemoteTargetType (const QString& type);
+ QString connectRemoteTargetType () const;
+
// Connectect to a RR server. "rr".
void setRRTraceDirectory (const QString& rrTraceDirectory);
diff --git a/src/SeerDebugDialog.ui b/src/SeerDebugDialog.ui
index a749105..08308d5 100644
--- a/src/SeerDebugDialog.ui
+++ b/src/SeerDebugDialog.ui
@@ -6,8 +6,8 @@
0
0
- 806
- 1040
+ 619
+ 845
@@ -593,95 +593,137 @@
Connect
-
- -
-
-
-
-
-
-
-
-
- Connect to a gdbserver (or similar) session.
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 248
- 20
-
-
-
-
- -
-
-
- Help for Connect launch method.
-
-
- ...
-
-
-
- :/seer/resources/RelaxLightIcons/help-about.svg:/seer/resources/RelaxLightIcons/help-about.svg
-
-
-
-
+
+ -
+
+
-
+
+
+ Connect to a gdbserver (or similar) session.
+
+
- -
-
+
-
+
- Qt::Vertical
+ Qt::Horizontal
- 20
- 40
+ 248
+ 20
- -
-
-
-
-
-
- Gdbserver
-
-
-
- -
-
-
-
- 100
- 0
-
-
-
- How to access the gdbserver.
-
-
-
-
-
- host:port or /dev/serialport
-
-
- true
-
-
-
-
+ -
+
+
+ Help for Connect launch method.
+
+
+ ...
+
+
+
+ :/seer/resources/RelaxLightIcons/help-about.svg:/seer/resources/RelaxLightIcons/help-about.svg
+
+
+ -
+
+
-
+
+
+ Gdbserver
+
+
+
+ -
+
+
+
+ 100
+ 0
+
+
+
+ How to access the gdbserver.
+
+
+
+
+
+ host:port or /dev/serialport
+
+
+ true
+
+
+
+ -
+
+
+ Remote target type
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Select the type of remote target connection.
+
+
-
+
+ remote
+
+
+ -
+
+ extended-remote
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Expanding
+
+
+
+ 468
+ 17
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 151
+
+
+
+
@@ -977,7 +1019,6 @@
attachProgramPidLineEdit
attachProgramPidToolButton
helpConnectToolButton
- connectProgramHostPortLineEdit
helpRRToolButton
rrTraceDirectoryLineEdit
rrLoadTraceDirectoryToolButton
diff --git a/src/SeerGdbConfigPage.cpp b/src/SeerGdbConfigPage.cpp
index 23ee5b1..6800b47 100644
--- a/src/SeerGdbConfigPage.cpp
+++ b/src/SeerGdbConfigPage.cpp
@@ -53,6 +53,11 @@ bool SeerGdbConfigPage::gdbEnablePrettyPrinting () const {
return gdbEnablePrettyPrintingCheckBox->isChecked();
}
+QString SeerGdbConfigPage::gdbRemoteTargetType () const {
+
+ return gdbRemoteTargetTypeCombo->currentText();
+}
+
void SeerGdbConfigPage::setGdbProgram (const QString& program) {
gdbProgramLineEdit->setText(program);
@@ -88,6 +93,11 @@ void SeerGdbConfigPage::setGdbEnablePrettyPrinting (bool flag) {
gdbEnablePrettyPrintingCheckBox->setChecked(flag);
}
+void SeerGdbConfigPage::setGdbRemoteTargetType (const QString& type) {
+
+ gdbRemoteTargetTypeCombo->setCurrentText(type);
+}
+
void SeerGdbConfigPage::reset () {
setGdbProgram("/usr/bin/gdb");
diff --git a/src/SeerGdbConfigPage.h b/src/SeerGdbConfigPage.h
index fdc0f56..e187089 100644
--- a/src/SeerGdbConfigPage.h
+++ b/src/SeerGdbConfigPage.h
@@ -19,6 +19,8 @@ class SeerGdbConfigPage : public QWidget, protected Ui::SeerGdbConfigPage {
bool gdbHandleTerminatingException () const;
bool gdbRandomizeStartAddress () const;
bool gdbEnablePrettyPrinting () const;
+ QString gdbRemoteTargetType () const;
+
void setGdbProgram (const QString& program);
void setGdbArguments (const QString& arguments);
@@ -27,6 +29,7 @@ class SeerGdbConfigPage : public QWidget, protected Ui::SeerGdbConfigPage {
void setGdbHandleTerminatingException (bool flag);
void setGdbRandomizeStartAddress (bool flag);
void setGdbEnablePrettyPrinting (bool flag);
+ void setGdbRemoteTargetType (const QString& type);
void reset ();
diff --git a/src/SeerGdbConfigPage.ui b/src/SeerGdbConfigPage.ui
index e22df45..6ffc223 100644
--- a/src/SeerGdbConfigPage.ui
+++ b/src/SeerGdbConfigPage.ui
@@ -6,26 +6,20 @@
0
0
- 603
- 470
+ 788
+ 714
SeerGdbConfigPage
-
-
- 0
-
-
- 0
-
- -
+
+
-
Gdb Settings
-
+
-
@@ -33,7 +27,7 @@
- -
+
-
Specify the path and name of the gdb debugger.
@@ -43,7 +37,7 @@
- -
+
-
Open a file dialog to locate the gdb debugger.
@@ -64,7 +58,7 @@
- -
+
-
Arguments to pass to the gdb debugger.
@@ -74,7 +68,7 @@
- -
+
-
-
@@ -128,10 +122,51 @@
+ -
+
+
-
+
+
+ Remote target type
+
+
+
+ -
+
+
+ Select the type of remote target connection.
+
+
-
+
+ remote
+
+
+ -
+
+ extended-remote
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 385
+ 20
+
+
+
+
- -
+
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
@@ -158,13 +193,19 @@ li.checked::marker { content: "\2612"; }
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace'; color:#24292f; background-color:transparent;"> unwind-on-terminating-exception on|off</span></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Enabling pretty-printing allows gdb to present certain variables (like std::string) in a pleasing way. Otherwise, the contents of the variables are presented in their full description. (See gdb 'pretty-printing'). Once enabled, it can not be turned off for the Seer session.</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">When connecting to a gdbserver (or the like), you can set gdb's remote target type to:</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">* remote</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">* extended-remote</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Extended remote is generally suggested but may not be supported by all gdbserver programs. If you experience a slowness starting Seer, try "remote".</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html>
- gdbGroupBox
- textBrowser
diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp
index e60e9fd..d6d8633 100644
--- a/src/SeerGdbWidget.cpp
+++ b/src/SeerGdbWidget.cpp
@@ -64,6 +64,7 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) {
_gdbHandleTerminatingException = true;
_gdbRandomizeStartAddress = false;
_gdbEnablePrettyPrinting = true;
+ _gdbRemoteTargetType = "extended-remote";
_gdbRecordMode = "";
_gdbRecordDirection = "";
_consoleScrollLines = 1000;
@@ -646,6 +647,16 @@ bool SeerGdbWidget::gdbEnablePrettyPrinting () const {
return _gdbEnablePrettyPrinting;
}
+void SeerGdbWidget::setGdbRemoteTargetType (const QString& type) {
+
+ _gdbRemoteTargetType = type;
+}
+
+QString SeerGdbWidget::gdbRemoteTargetType () const {
+
+ return _gdbRemoteTargetType;
+}
+
void SeerGdbWidget::setGdbRecordMode(const QString& mode) {
_gdbRecordMode = mode;
@@ -1199,12 +1210,16 @@ void SeerGdbWidget::handleGdbConnectExecutable () {
setExecutablePid(0);
reattachConsole();
- // Connect to the remote gdbserver.
- handleGdbCommand(QString("-target-select extended-remote %1").arg(executableConnectHostPort()));
-
- // Load ithe executable, if needed.
+ // Load any 'pre' commands.
if (newExecutableFlag() == true) {
handleGdbExecutablePreCommands(); // Run any 'pre' commands before program is loaded.
+ }
+
+ // Connect to the remote gdbserver using the proper remote type.
+ handleGdbCommand(QString("-target-select %1 %2").arg(gdbRemoteTargetType()).arg(executableConnectHostPort()));
+
+ // Load the executable, if needed.
+ if (newExecutableFlag() == true) {
handleGdbExecutableName(); // Load the program into the gdb process.
handleGdbExecutableSources(); // Load the program source files.
handleGdbExecutableLoadBreakpoints(); // Set the program's breakpoints (if any) before running.
diff --git a/src/SeerGdbWidget.h b/src/SeerGdbWidget.h
index 92df8d5..186ba03 100644
--- a/src/SeerGdbWidget.h
+++ b/src/SeerGdbWidget.h
@@ -101,6 +101,9 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm {
void setGdbEnablePrettyPrinting (bool flag);
bool gdbEnablePrettyPrinting () const;
+ void setGdbRemoteTargetType (const QString& type);
+ QString gdbRemoteTargetType () const;
+
void setGdbRecordMode (const QString& mode);
QString gdbRecordMode () const;
@@ -377,6 +380,7 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm {
bool _gdbEnablePrettyPrinting;
QString _gdbRecordMode;
QString _gdbRecordDirection;
+ QString _gdbRemoteTargetType;
bool _assemblyShowAssemblyTabOnStartup;
QString _assemblyDisassemblyFlavor;
QString _assemblySymbolDemangling;
diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp
index 5ab0e24..982f3c2 100644
--- a/src/SeerMainWindow.cpp
+++ b/src/SeerMainWindow.cpp
@@ -342,6 +342,14 @@ const QString& SeerMainWindow::executableConnectHostPort () const {
return gdbWidget->executableConnectHostPort();
}
+void SeerMainWindow::setExecutableConnectRemoteTargetType (const QString& type) {
+ gdbWidget->setGdbRemoteTargetType(type);
+}
+
+QString SeerMainWindow::executableConnectRemoteTargetType () const {
+ return gdbWidget->gdbRemoteTargetType();
+}
+
void SeerMainWindow::setExecutableRRTraceDirectory (const QString& executableRRTraceDirectory) {
gdbWidget->setExecutableRRTraceDirectory(executableRRTraceDirectory);
}
@@ -525,6 +533,7 @@ void SeerMainWindow::handleFileDebug () {
dlg.setNonStopMode(executableNonStopMode());
dlg.setAttachPid(executablePid());
dlg.setConnectHostPort(executableConnectHostPort());
+ dlg.setConnectRemoteTargetType(executableConnectRemoteTargetType());
dlg.setRRTraceDirectory(executableRRTraceDirectory());
dlg.setCoreFilename(executableCoreFilename());
dlg.setPreGdbCommands(executablePreGdbCommands());
@@ -558,6 +567,7 @@ void SeerMainWindow::handleFileDebug () {
setExecutableNonStopMode(dlg.nonStopMode());
setExecutablePid(dlg.attachPid());
setExecutableConnectHostPort(dlg.connectHostPort());
+ setExecutableConnectRemoteTargetType(dlg.connectRemoteTargetType());
setExecutableRRTraceDirectory(dlg.rrTraceDirectory());
setExecutableCoreFilename(dlg.coreFilename());
setExecutablePreGdbCommands(dlg.preGdbCommands());
@@ -668,6 +678,7 @@ void SeerMainWindow::handleSettingsConfiguration () {
dlg.setGdbHandleTerminatingException(gdbWidget->gdbHandleTerminatingException());
dlg.setGdbRandomizeStartAddress(gdbWidget->gdbRandomizeStartAddress());
dlg.setGdbEnablePrettyPrinting(gdbWidget->gdbEnablePrettyPrinting());
+ dlg.setGdbRemoteTargetType(gdbWidget->gdbRemoteTargetType());
dlg.setEditorFont(gdbWidget->editorManager()->editorFont());
dlg.setEditorTabSize(gdbWidget->editorManager()->editorTabSize());
dlg.setEditorHighlighterSettings(gdbWidget->editorManager()->editorHighlighterSettings());
@@ -711,6 +722,7 @@ void SeerMainWindow::handleSettingsConfiguration () {
gdbWidget->setGdbHandleTerminatingException(dlg.gdbHandleTerminatingException());
gdbWidget->setGdbRandomizeStartAddress(dlg.gdbRandomizeStartAddress());
gdbWidget->setGdbEnablePrettyPrinting(dlg.gdbEnablePrettyPrinting());
+ gdbWidget->setGdbRemoteTargetType(dlg.gdbRemoteTargetType());
gdbWidget->editorManager()->setEditorFont(dlg.editorFont());
gdbWidget->editorManager()->setEditorTabSize(dlg.editorTabSize());
gdbWidget->editorManager()->setEditorHighlighterSettings(dlg.editorHighlighterSettings());
@@ -1290,6 +1302,7 @@ void SeerMainWindow::writeConfigSettings () {
settings.setValue("handleterminatingexception", gdbWidget->gdbHandleTerminatingException());
settings.setValue("randomizestartaddress", gdbWidget->gdbRandomizeStartAddress());
settings.setValue("enableprettyprinting", gdbWidget->gdbEnablePrettyPrinting());
+ settings.setValue("remotetargettype", gdbWidget->gdbRemoteTargetType());
} settings.endGroup();
settings.beginGroup("rr"); {
@@ -1366,6 +1379,7 @@ void SeerMainWindow::readConfigSettings () {
gdbWidget->setGdbHandleTerminatingException(settings.value("handleterminatingexception", true).toBool());
gdbWidget->setGdbRandomizeStartAddress(settings.value("randomizestartaddress", false).toBool());
gdbWidget->setGdbEnablePrettyPrinting(settings.value("enableprettyprinting", true).toBool());
+ gdbWidget->setGdbRemoteTargetType(settings.value("remotetargettype", "extended-remote").toString());
} settings.endGroup();
settings.beginGroup("rr"); {
diff --git a/src/SeerMainWindow.h b/src/SeerMainWindow.h
index 7ba98a4..4c55b85 100644
--- a/src/SeerMainWindow.h
+++ b/src/SeerMainWindow.h
@@ -20,90 +20,92 @@ class SeerMainWindow : public QMainWindow, protected Ui::SeerMainWindowForm {
SeerMainWindow (QWidget* parent = 0);
~SeerMainWindow ();
- void setExecutableName (const QString& executableName);
- const QString& executableName () const;
- void setExecutableSymbolName (const QString& executableSymbolName);
- const QString& executableSymbolName () const;
- void setExecutableArguments (const QString& executableArguments);
- void setExecutableArguments (const QStringList& executableArguments);
- const QString& executableArguments () const;
- void setExecutableWorkingDirectory (const QString& executableWorkingDirectory);
- const QString& executableWorkingDirectory () const;
- void setExecutableBreakpointsFilename (const QString& breakpointsFilename);
- const QString& executableBreakpointsFilename () const;
- void setExecutableBreakpointFunctionName (const QString& nameoraddress);
- const QString& executableBreakpointFunctionName () const;
- void setExecutableBreakpointSourceName (const QString& sourceFilenameAndLineno);
- const QString& executableBreakpointSourceName () const;
- void setExecutableShowAssemblyTab (bool flag);
- bool executableShowAssemblyTab () const;
- void setExecutableRandomizeStartAddress (bool flag);
- bool executableRandomizeStartAddress () const;
- void setExecutableNonStopMode (bool flag);
- bool executableNonStopMode () const;
- void setExecutablePid (int pid);
- int executablePid () const;
- void setExecutableConnectHostPort (const QString& executableConnectHostPort);
- const QString& executableConnectHostPort () const;
- void setExecutableRRTraceDirectory (const QString& executableRRTraceDirectory);
- const QString& executableRRTraceDirectory () const;
- void setExecutableCoreFilename (const QString& executableCoreFilename);
- const QString& executableCoreFilename () const;
- void setExecutablePreGdbCommands (const QStringList& preGdbCommands);
- const QStringList& executablePreGdbCommands () const;
- void setExecutablePostGdbCommands (const QStringList& postGdbCommands);
- const QStringList& executablePostGdbCommands () const;
- void setProjectFilename (const QString& projectFilename);
- const QString& projectFilename () const;
- void setGdbProgramOverride (const QString& gdbProgram);
- QString gdbProgramOverride () const;
- void setGdbArgumentsOverride (const QString& gdbProgram);
- QString gdbArgumentsOverride () const;
+ void setExecutableName (const QString& executableName);
+ const QString& executableName () const;
+ void setExecutableSymbolName (const QString& executableSymbolName);
+ const QString& executableSymbolName () const;
+ void setExecutableArguments (const QString& executableArguments);
+ void setExecutableArguments (const QStringList& executableArguments);
+ const QString& executableArguments () const;
+ void setExecutableWorkingDirectory (const QString& executableWorkingDirectory);
+ const QString& executableWorkingDirectory () const;
+ void setExecutableBreakpointsFilename (const QString& breakpointsFilename);
+ const QString& executableBreakpointsFilename () const;
+ void setExecutableBreakpointFunctionName (const QString& nameoraddress);
+ const QString& executableBreakpointFunctionName () const;
+ void setExecutableBreakpointSourceName (const QString& sourceFilenameAndLineno);
+ const QString& executableBreakpointSourceName () const;
+ void setExecutableShowAssemblyTab (bool flag);
+ bool executableShowAssemblyTab () const;
+ void setExecutableRandomizeStartAddress (bool flag);
+ bool executableRandomizeStartAddress () const;
+ void setExecutableNonStopMode (bool flag);
+ bool executableNonStopMode () const;
+ void setExecutablePid (int pid);
+ int executablePid () const;
+ void setExecutableConnectHostPort (const QString& executableConnectHostPort);
+ const QString& executableConnectHostPort () const;
+ void setExecutableConnectRemoteTargetType (const QString& type);
+ QString executableConnectRemoteTargetType () const;
+ void setExecutableRRTraceDirectory (const QString& executableRRTraceDirectory);
+ const QString& executableRRTraceDirectory () const;
+ void setExecutableCoreFilename (const QString& executableCoreFilename);
+ const QString& executableCoreFilename () const;
+ void setExecutablePreGdbCommands (const QStringList& preGdbCommands);
+ const QStringList& executablePreGdbCommands () const;
+ void setExecutablePostGdbCommands (const QStringList& postGdbCommands);
+ const QStringList& executablePostGdbCommands () const;
+ void setProjectFilename (const QString& projectFilename);
+ const QString& projectFilename () const;
+ void setGdbProgramOverride (const QString& gdbProgram);
+ QString gdbProgramOverride () const;
+ void setGdbArgumentsOverride (const QString& gdbProgram);
+ QString gdbArgumentsOverride () const;
- void launchExecutable (const QString& launchMode, const QString& breakMode);
- const QString& executableLaunchMode () const;
- const QString& executableBreakMode () const;
+ void launchExecutable (const QString& launchMode, const QString& breakMode);
+ const QString& executableLaunchMode () const;
+ const QString& executableBreakMode () const;
- void setStyleName (const QString& name);
- const QString& styleName ();
+ void setStyleName (const QString& name);
+ const QString& styleName ();
private slots:
- void handleFileDebug ();
- void handleFileArguments ();
- void handleFileQuit ();
- void handleViewMemoryVisualizer ();
- void handleViewArrayVisualizer ();
- void handleViewStructVisualizer ();
- void handleViewVarVisualizer ();
- void handleViewImageVisualizer ();
- void handleViewAssembly ();
- void handleViewAssemblyShown (bool shown);
- void handleViewConsoleAttached ();
- void handleViewConsoleDetached ();
- void handleViewConsoleDetachedMinimized ();
- void handleSettingsConfiguration ();
- void handleSettingsSaveConfiguration ();
- void handleHelpAbout ();
- void handleText (const QString& text);
- void handleRunStatusChanged (SeerRunStatusIndicator::RunStatus status);
- void handleRecordSettingsChanged ();
- void handleChangeWindowTitle (QString title);
- void handleHelpToolButtonClicked ();
- void handleRunExecutable ();
- void handleStartExecutable ();
- void handleStyleMenuChanged ();
- void handleShowMessage (QString message, int time);
+ void handleFileDebug ();
+ void handleFileArguments ();
+ void handleFileQuit ();
+ void handleViewMemoryVisualizer ();
+ void handleViewArrayVisualizer ();
+ void handleViewStructVisualizer ();
+ void handleViewVarVisualizer ();
+ void handleViewImageVisualizer ();
+ void handleViewAssembly ();
+ void handleViewAssemblyShown (bool shown);
+ void handleViewConsoleAttached ();
+ void handleViewConsoleDetached ();
+ void handleViewConsoleDetachedMinimized ();
+ void handleSettingsConfiguration ();
+ void handleSettingsSaveConfiguration ();
+ void handleHelpAbout ();
+ void handleText (const QString& text);
+ void handleRunStatusChanged (SeerRunStatusIndicator::RunStatus status);
+ void handleRecordSettingsChanged ();
+ void handleChangeWindowTitle (QString title);
+ void handleHelpToolButtonClicked ();
+ void handleRunExecutable ();
+ void handleStartExecutable ();
+ void handleStyleMenuChanged ();
+ void handleShowMessage (QString message, int time);
protected:
- void writeSettings ();
- void readSettings ();
- void writeConfigSettings ();
- void readConfigSettings ();
- void resizeEvent (QResizeEvent* event);
- void closeEvent (QCloseEvent* event);
- void setKeySettings (const SeerKeySettings& settings);
- const SeerKeySettings keySettings () const;
- void refreshShortCuts ();
+ void writeSettings ();
+ void readSettings ();
+ void writeConfigSettings ();
+ void readConfigSettings ();
+ void resizeEvent (QResizeEvent* event);
+ void closeEvent (QCloseEvent* event);
+ void setKeySettings (const SeerKeySettings& settings);
+ const SeerKeySettings keySettings () const;
+ void refreshShortCuts ();
private:
QActionGroup* _styleMenuActionGroup;
diff --git a/src/resources/help/ConnectDebugMode.md b/src/resources/help/ConnectDebugMode.md
index 33eb6de..504bf17 100644
--- a/src/resources/help/ConnectDebugMode.md
+++ b/src/resources/help/ConnectDebugMode.md
@@ -13,6 +13,9 @@ In this mode, Seer needs:
* Optional executable file if the remote gdbserver/gdbstub hasn't loaded one
* Optional symbol file if the executable doesn't have debug information
* How to look for the gdbserver (machine and port)
+* Remote target type when connecting to the gdbserver.
+ * 'extended-remote' (default)
+ * 'remote' (sometimes required if gdbserver doesn't support all commands)
* Optional gdb commands to execute before and after Seer connects to the gdbserver
### What can you do?
diff --git a/tests/hellogdbserver/project.seer b/tests/hellogdbserver/project.seer
index f171f10..c4171a9 100644
--- a/tests/hellogdbserver/project.seer
+++ b/tests/hellogdbserver/project.seer
@@ -1,7 +1,8 @@
{
"seerproject": {
"connectmode": {
- "gdbserver": ":1234"
+ "gdbserver": ":1234",
+ "targettype": "extended-remote"
},
"executable": "/nas/erniep/Development/seer/tests/hellogdbserver/hellogdbserver",
"postgdbcommands": [