diff --git a/src/SeerAssemblyConfigPage.cpp b/src/SeerAssemblyConfigPage.cpp index 308c89a..4cddf1b 100644 --- a/src/SeerAssemblyConfigPage.cpp +++ b/src/SeerAssemblyConfigPage.cpp @@ -73,11 +73,11 @@ void SeerAssemblyConfigPage::setDisassembyFlavor (const QString& flavor) const { } } -void SeerAssemblyConfigPage::setSymbolDemagling (const QString& yesno) const { +void SeerAssemblyConfigPage::setSymbolDemagling (const QString& onoff) const { - if (yesno == "yes") { + if (onoff == "on") { demanglingOnRadioButton->setChecked(true); - }else if (yesno == "no") { + }else if (onoff == "off") { demanglingOffRadioButton->setChecked(true); }else{ } @@ -93,7 +93,7 @@ void SeerAssemblyConfigPage::reset () { setShowAssemblyTabOnStartup(false); setKeepAssemblyTabOnTop(true); setDisassembyFlavor("att"); - setSymbolDemagling("yes"); + setSymbolDemagling("on"); setRegisterFormat("Natural"); } diff --git a/src/SeerAssemblyConfigPage.h b/src/SeerAssemblyConfigPage.h index 3210b71..c2edc9b 100644 --- a/src/SeerAssemblyConfigPage.h +++ b/src/SeerAssemblyConfigPage.h @@ -21,7 +21,7 @@ class SeerAssemblyConfigPage : public QWidget, protected Ui::SeerAssemblyConfigP void setShowAssemblyTabOnStartup (bool flag) const; void setKeepAssemblyTabOnTop (bool flag) const; void setDisassembyFlavor (const QString& flavor) const; - void setSymbolDemagling (const QString& yesno) const; + void setSymbolDemagling (const QString& onoff) const; void setRegisterFormat (const QString& format) const; void reset (); diff --git a/src/SeerConfigDialog.cpp b/src/SeerConfigDialog.cpp index 9201cbe..118ce29 100644 --- a/src/SeerConfigDialog.cpp +++ b/src/SeerConfigDialog.cpp @@ -223,9 +223,9 @@ QString SeerConfigDialog::assemblyDisassembyFlavor () const { return _assemblyConfigPage->disassembyFlavor(); } -void SeerConfigDialog::setAssemblySymbolDemagling (const QString& yesno) { +void SeerConfigDialog::setAssemblySymbolDemagling (const QString& onoff) { - _assemblyConfigPage->setSymbolDemagling(yesno); + _assemblyConfigPage->setSymbolDemagling(onoff); } QString SeerConfigDialog::assemblySymbolDemagling () const { diff --git a/src/SeerConfigDialog.h b/src/SeerConfigDialog.h index 94e2c7c..7e6fbae 100644 --- a/src/SeerConfigDialog.h +++ b/src/SeerConfigDialog.h @@ -68,7 +68,7 @@ class SeerConfigDialog : public QDialog, protected Ui::SeerConfigDialogForm { void setAssemblyDisassembyFlavor (const QString& flavor); QString assemblyDisassembyFlavor () const; - void setAssemblySymbolDemagling (const QString& yesno); + void setAssemblySymbolDemagling (const QString& onoff); QString assemblySymbolDemagling () const; void setAssemblyRegisterFormat (const QString& format); diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index 8fd2b77..5ecbfc9 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -46,6 +46,7 @@ SeerGdbWidget::SeerGdbWidget (QWidget* parent) : QWidget(parent) { _gdbArguments = "--interpreter=mi"; _gdbASyncMode = true; _assemblyShowAssemblyTabOnStartup = false; + _assemblyDisassemblyFlavor = "att"; _gdbHandleTerminatingException = true; _consoleMode = ""; _consoleScrollLines = 1000; @@ -611,6 +612,8 @@ void SeerGdbWidget::handleGdbRunExecutable () { handleGdbExecutableSources(); // Load the program source files. handleGdbExecutableWorkingDirectory(); // Set the program's working directory before running. handleGdbExecutableLoadBreakpoints(); // Set the program's breakpoints (if any) before running. + handleGdbAssemblyDisassemblyFlavor(); // Set the disassembly flavor to use. + handleGdbAssemblySymbolDemangling(); // Set the symbol demangling. if (assemblyShowAssemblyTabOnStartup()) { editorManager()->showAssembly(); @@ -699,6 +702,8 @@ void SeerGdbWidget::handleGdbStartExecutable () { handleGdbExecutableSources(); // Load the program source files. handleGdbExecutableWorkingDirectory(); // Set the program's working directory before running. handleGdbExecutableLoadBreakpoints(); // Set the program's breakpoints (if any) before running. + handleGdbAssemblyDisassemblyFlavor(); // Set the disassembly flavor to use. + handleGdbAssemblySymbolDemangling(); // Set the symbol demangling. if (assemblyShowAssemblyTabOnStartup()) { editorManager()->showAssembly(); @@ -778,7 +783,9 @@ void SeerGdbWidget::handleGdbAttachExecutable () { handleGdbExecutableName(); // Load the program into the gdb process. handleGdbExecutableSources(); // Load the program source files. handleGdbExecutableWorkingDirectory(); // Set the program's working directory before running. - // + handleGdbAssemblyDisassemblyFlavor(); // Set the disassembly flavor to use. + handleGdbAssemblySymbolDemangling(); // Set the symbol demangling. + if (assemblyShowAssemblyTabOnStartup()) { editorManager()->showAssembly(); } @@ -847,6 +854,8 @@ void SeerGdbWidget::handleGdbConnectExecutable () { if (newExecutableFlag() == true) { handleGdbExecutableName(); // Load the program into the gdb process. handleGdbExecutableSources(); // Load the program source files. + handleGdbAssemblyDisassemblyFlavor(); // Set the disassembly flavor to use. + handleGdbAssemblySymbolDemangling(); // Set the symbol demangling. if (assemblyShowAssemblyTabOnStartup()) { editorManager()->showAssembly(); @@ -930,6 +939,8 @@ void SeerGdbWidget::handleGdbCoreFileExecutable () { if (newExecutableFlag() == true) { handleGdbExecutableName(); // Load the program into the gdb process. handleGdbExecutableSources(); // Load the program source files. + handleGdbAssemblyDisassemblyFlavor(); // Set the disassembly flavor to use. + handleGdbAssemblySymbolDemangling(); // Set the symbol demangling. if (assemblyShowAssemblyTabOnStartup()) { editorManager()->showAssembly(); @@ -1831,6 +1842,20 @@ void SeerGdbWidget::handleGdbSaveBreakpoints () { QMessageBox::information(this, "Seer", "Saved."); } +void SeerGdbWidget::handleGdbAssemblyDisassemblyFlavor () { + + if (_assemblyDisassemblyFlavor != "") { + handleGdbCommand(QString("set disassembly-flavor ") + _assemblyDisassemblyFlavor); + } +} + +void SeerGdbWidget::handleGdbAssemblySymbolDemangling () { + + if (_assemblySymbolDemangling != "") { + handleGdbCommand(QString("set print asm-demangle ") + _assemblySymbolDemangling); + } +} + void SeerGdbWidget::handleGdbProcessFinished (int exitCode, QProcess::ExitStatus exitStatus) { //qDebug() << "Gdb process finished. Exit code =" << exitCode << "Exit status =" << exitStatus; @@ -1900,9 +1925,11 @@ void SeerGdbWidget::writeSettings () { } settings.endArray(); settings.beginGroup("assembly"); { - settings.setValue("showassemblytabonstartup", assemblyShowAssemblyTabOnStartup()); - settings.setValue("keepassemblytabontop", assemblyKeepAssemblyTabOnTop()); - settings.setValue("assemblyregisterformat", assemblyRegisterFormat()); + settings.setValue("showassemblytabonstartup", assemblyShowAssemblyTabOnStartup()); + settings.setValue("keepassemblytabontop", assemblyKeepAssemblyTabOnTop()); + settings.setValue("assemblydisassemblyflavor", assemblyDisassembyFlavor()); + settings.setValue("assemblysymboldemagling", assemblySymbolDemagling()); + settings.setValue("assemblyregisterformat", assemblyRegisterFormat()); } settings.endGroup(); settings.beginGroup("gdboutputlog"); { @@ -1960,6 +1987,8 @@ void SeerGdbWidget::readSettings () { settings.beginGroup("assembly"); { setAssemblyShowAssemblyTabOnStartup(settings.value("showassemblytabonstartup", false).toBool()); setAssemblyKeepAssemblyTabOnTop(settings.value("keepassemblytabontop", true).toBool()); + setAssemblyDisassembyFlavor(settings.value("assemblydisassemblyflavor", "att").toString()); + setAssemblySymbolDemagling(settings.value("assemblysymboldemagling", "on").toString()); setAssemblyRegisterFormat(settings.value("assemblyregisterformat", "Natural").toString()); } settings.endGroup(); @@ -2208,15 +2237,31 @@ bool SeerGdbWidget::assemblyKeepAssemblyTabOnTop () const { } void SeerGdbWidget::setAssemblyDisassembyFlavor (const QString& flavor) { + + _assemblyDisassemblyFlavor = flavor; + + if (isGdbRuning()) { + handleGdbAssemblyDisassemblyFlavor(); + } } QString SeerGdbWidget::assemblyDisassembyFlavor () const { + + return _assemblyDisassemblyFlavor; } -void SeerGdbWidget::setAssemblySymbolDemagling (const QString& yesno) { +void SeerGdbWidget::setAssemblySymbolDemagling (const QString& onoff) { + + _assemblySymbolDemangling = onoff; + + if (isGdbRuning()) { + handleGdbAssemblySymbolDemangling(); + } } QString SeerGdbWidget::assemblySymbolDemagling () const { + + return _assemblySymbolDemangling; } void SeerGdbWidget::setAssemblyRegisterFormat (const QString& format) { diff --git a/src/SeerGdbWidget.h b/src/SeerGdbWidget.h index a9c8f68..6bae177 100644 --- a/src/SeerGdbWidget.h +++ b/src/SeerGdbWidget.h @@ -106,7 +106,7 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { void setAssemblyDisassembyFlavor (const QString& flavor); QString assemblyDisassembyFlavor () const; - void setAssemblySymbolDemagling (const QString& yesno); + void setAssemblySymbolDemagling (const QString& onoff); QString assemblySymbolDemagling () const; void setAssemblyRegisterFormat (const QString& format); @@ -213,6 +213,8 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { void handleLogOuputChanged (); void handleGdbLoadBreakpoints (); void handleGdbSaveBreakpoints (); + void handleGdbAssemblyDisassemblyFlavor (); + void handleGdbAssemblySymbolDemangling (); void handleGdbProcessFinished (int exitCode, QProcess::ExitStatus exitStatus); void handleGdbProcessErrored (QProcess::ProcessError errorStatus); @@ -241,6 +243,8 @@ class SeerGdbWidget : public QWidget, protected Ui::SeerGdbWidgetForm { QString _dprintfFunction; QString _dprintfChannel; bool _assemblyShowAssemblyTabOnStartup; + QString _assemblyDisassemblyFlavor; + QString _assemblySymbolDemangling; QString _assemblyRegisterFormat; QString _executableName; diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index 0463d43..31dcecd 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -374,6 +374,8 @@ void SeerMainWindow::handleSettingsConfiguration () { dlg.setSourceAlternateDirectories(gdbWidget->sourceAlternateDirectories()); dlg.setAssemblyShowAssemblyTabOnStartup(gdbWidget->assemblyShowAssemblyTabOnStartup()); dlg.setAssemblyKeepAssemblyTabOnTop(gdbWidget->assemblyKeepAssemblyTabOnTop()); + dlg.setAssemblyDisassembyFlavor(gdbWidget->assemblyDisassembyFlavor()); + dlg.setAssemblySymbolDemagling(gdbWidget->assemblySymbolDemagling()); dlg.setAssemblyRegisterFormat(gdbWidget->assemblyRegisterFormat()); dlg.setSeerConsoleMode(gdbWidget->consoleMode()); dlg.setSeerConsoleScrollLines(gdbWidget->consoleScrollLines()); @@ -400,6 +402,8 @@ void SeerMainWindow::handleSettingsConfiguration () { gdbWidget->setSourceAlternateDirectories(dlg.sourceAlternateDirectories()); gdbWidget->setAssemblyShowAssemblyTabOnStartup(dlg.assemblyShowAssemblyTabOnStartup()); gdbWidget->setAssemblyKeepAssemblyTabOnTop(dlg.assemblyKeepAssemblyTabOnTop()); + gdbWidget->setAssemblyDisassembyFlavor(dlg.assemblyDisassembyFlavor()); + gdbWidget->setAssemblySymbolDemagling(dlg.assemblySymbolDemagling()); gdbWidget->setAssemblyRegisterFormat(dlg.assemblyRegisterFormat()); gdbWidget->setConsoleMode(dlg.seerConsoleMode()); gdbWidget->setConsoleScrollLines(dlg.seerConsoleScrollLines());