added debug option to change debug plugin

This commit is contained in:
mandlebro 2018-06-14 12:49:22 +01:00 committed by xarkes
parent ffb3903311
commit ac4751eb4a
9 changed files with 163 additions and 6 deletions

View File

@ -818,6 +818,29 @@ void CutterCore::stepOverDebug()
emit registersChanged();
}
QStringList CutterCore::getDebugPlugins()
{
QStringList plugins;
QJsonArray pluginArray = cmdj("dLj").array();
for (QJsonValue value : pluginArray) {
QJsonObject pluginObject = value.toObject();
QString plugin = pluginObject["name"].toString();
plugins << plugin;
}
return plugins;
}
QString CutterCore::getActiveDebugPlugin()
{
return getConfig("dbg.backend");
}
void CutterCore::setDebugPlugin(QString plugin)
{
setConfig("dbg.backend", plugin);
}
void CutterCore::addBreakpoint(RVA addr)
{
cmd("db " + RAddressString(addr));

View File

@ -477,6 +477,9 @@ public:
void stepDebug();
void stepOverDebug();
void addBreakpoint(RVA offset);
QString getActiveDebugPlugin();
QStringList getDebugPlugins();
void setDebugPlugin(QString plugin);
RVA getOffsetJump(RVA addr);
QString getDecompiledCode(RVA addr);

View File

@ -177,7 +177,8 @@ SOURCES += \
utils/ProgressIndicator.cpp \
utils/R2Task.cpp \
widgets/DebugToolbar.cpp \
widgets/MemoryMapWidget.cpp
widgets/MemoryMapWidget.cpp \
dialogs/preferences/DebugOptionsWidget.cpp
HEADERS += \
Cutter.h \
@ -266,7 +267,8 @@ HEADERS += \
plugins/CutterPlugin.h \
utils/R2Task.h \
widgets/DebugToolbar.h \
widgets/MemoryMapWidget.h
widgets/MemoryMapWidget.h \
dialogs/preferences/DebugOptionsWidget.h
FORMS += \
dialogs/AboutDialog.ui \
@ -315,7 +317,9 @@ FORMS += \
widgets/RegistersWidget.ui \
widgets/BacktraceWidget.ui \
dialogs/OpenFileDialog.ui \
widgets/MemoryMapWidget.ui
widgets/MemoryMapWidget.ui \
widgets/MemoryMapWidget.ui \
dialogs/preferences/DebugOptionsWidget.ui
RESOURCES += \
resources.qrc \

View File

@ -0,0 +1,42 @@
#include <QLabel>
#include <QFontDialog>
#include "DebugOptionsWidget.h"
#include "ui_DebugOptionsWidget.h"
#include <QComboBox>
#include "PreferencesDialog.h"
#include "utils/Helpers.h"
#include "utils/Configuration.h"
DebugOptionsWidget::DebugOptionsWidget(PreferencesDialog */*dialog*/, QWidget *parent)
: QDialog(parent),
ui(new Ui::DebugOptionsWidget)
{
ui->setupUi(this);
updateDebugPlugin();
}
DebugOptionsWidget::~DebugOptionsWidget() {}
void DebugOptionsWidget::updateDebugPlugin()
{
disconnect(ui->pluginComboBox, SIGNAL(currentIndexChanged(const QString &)), this,
SLOT(on_pluginComboBox_currentIndexChanged(const QString &)));
QStringList plugins = Core()->getDebugPlugins();
for (QString str : plugins)
ui->pluginComboBox->addItem(str);
QString plugin = Core()->getActiveDebugPlugin();
ui->pluginComboBox->setCurrentText(plugin);
connect(ui->pluginComboBox, SIGNAL(currentIndexChanged(const QString &)), this,
SLOT(on_pluginComboBox_currentIndexChanged(const QString &)));
}
void DebugOptionsWidget::on_pluginComboBox_currentIndexChanged(const QString &plugin)
{
Core()->setDebugPlugin(plugin);
}

View File

@ -0,0 +1,29 @@
#pragma once
#include <memory>
#include "Cutter.h"
class PreferencesDialog;
namespace Ui {
class DebugOptionsWidget;
}
class DebugOptionsWidget : public QDialog
{
Q_OBJECT
public:
explicit DebugOptionsWidget(PreferencesDialog *dialog, QWidget *parent = nullptr);
~DebugOptionsWidget();
private:
std::unique_ptr<Ui::DebugOptionsWidget> ui;
private slots:
void updateDebugPlugin();
void on_pluginComboBox_currentIndexChanged(const QString &index);
};

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DebugOptionsWidget</class>
<widget class="QWidget" name="DebugOptionsWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>442</width>
<height>225</height>
</rect>
</property>
<property name="windowTitle">
<string>Debug</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetMinAndMaxSize</enum>
</property>
<item>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="pluginLabel">
<property name="text">
<string>Debug Plugin:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="pluginComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -6,6 +6,7 @@
#include "GeneralOptionsWidget.h"
#include "AsmOptionsWidget.h"
#include "GraphOptionsWidget.h"
#include "DebugOptionsWidget.h"
#include "PreferenceCategory.h"
@ -24,20 +25,25 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
{
"General",
new GeneralOptionsWidget(this),
QIcon(":/img/icons/cog.svg")
QIcon(":/img/icons/cog_light.svg")
},
{
"Assembly",
new AsmOptionsWidget(this),
QIcon(":/img/icons/disas.svg"),
QIcon(":/img/icons/disas_light.svg"),
{
{
"Graph",
new GraphOptionsWidget(this),
QIcon(":/img/icons/graph.svg")
QIcon(":/img/icons/graph_light.svg")
},
}
},
{
"Debug",
new DebugOptionsWidget(this),
QIcon(":/img/icons/bug_light.svg")
}
};
for (auto &c : prefs)

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
<path d="M3.5 0c-1.19 0-1.98 1.69-1.19 2.5-.09.07-.2.14-.28.22l-1.31-.66a.5.5 0 0 0-.34-.06.5.5 0 0 0-.09.94l1.16.56c-.09.16-.19.33-.25.5h-.69a.5.5 0 0 0-.09 0 .5.5 0 1 0 .09 1h.5c0 .23.02.45.06.66l-.78.41a.5.5 0 1 0 .44.88l.66-.34c.25.46.62.85 1.03 1.09.35-.19.59-.44.59-.72v-1.44a.5.5 0 0 0 0-.09v-.81a.5.5 0 0 0 0-.22c.05-.23.26-.41.5-.41.28 0 .5.22.5.5v.88a.5.5 0 0 0 0 .09v.06a.5.5 0 0 0 0 .09v1.34c0 .27.24.53.59.72.41-.25.79-.63 1.03-1.09l.66.34a.5.5 0 1 0 .44-.88l-.78-.41c.04-.21.06-.43.06-.66h.5a.5.5 0 1 0 0-1h-.69c-.06-.17-.16-.34-.25-.5l1.16-.56a.5.5 0 0 0-.31-.94.5.5 0 0 0-.13.06l-1.31.66c-.09-.08-.19-.15-.28-.22.78-.83 0-2.5-1.19-2.5z" fill="#aaacaf"
/>
</svg>

After

Width:  |  Height:  |  Size: 761 B

View File

@ -44,6 +44,7 @@
<file>img/icons/graph.svg</file>
<file>img/icons/hexdump_light.svg</file>
<file>img/icons/hexdump_white.svg</file>
<file>img/icons/bug_light.svg</file>
<file>img/icons/cog_light.svg</file>
<file>img/icons/cog_white.svg</file>
<file>img/icons/new_light.svg</file>