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 &quot;remote&quot;.</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": [