mirror of
https://github.com/rizinorg/cutter.git
synced 2025-02-07 15:32:13 +00:00
Debug toolbar update
This commit is contained in:
parent
bc72c53d01
commit
d96150528d
@ -906,7 +906,7 @@ void CutterCore::startEmulation()
|
|||||||
emit registersChanged();
|
emit registersChanged();
|
||||||
if (!currentlyDebugging || !currentlyEmulating) {
|
if (!currentlyDebugging || !currentlyEmulating) {
|
||||||
// prevent register flags from appearing during debug/emul
|
// prevent register flags from appearing during debug/emul
|
||||||
// setConfig("asm.flags", false);
|
setConfig("asm.flags", false);
|
||||||
// allows to view self-modifying code changes or other binary changes
|
// allows to view self-modifying code changes or other binary changes
|
||||||
setConfig("io.cache", true);
|
setConfig("io.cache", true);
|
||||||
currentlyDebugging = true;
|
currentlyDebugging = true;
|
||||||
|
@ -132,9 +132,9 @@ void MainWindow::initUI()
|
|||||||
DebugToolbar *debugToolbar = new DebugToolbar(this);
|
DebugToolbar *debugToolbar = new DebugToolbar(this);
|
||||||
ui->mainToolBar->addWidget(debugToolbar);
|
ui->mainToolBar->addWidget(debugToolbar);
|
||||||
// Debug menu
|
// Debug menu
|
||||||
ui->menuDebug->addAction(debugToolbar->actionStart);
|
// ui->menuDebug->addAction(debugToolbar->actionStart);
|
||||||
ui->menuDebug->addAction(debugToolbar->actionStartEmul);
|
ui->menuDebug->addAction(debugToolbar->actionStartEmul);
|
||||||
ui->menuDebug->addAction(debugToolbar->actionAttach);
|
// ui->menuDebug->addAction(debugToolbar->actionAttach);
|
||||||
ui->menuDebug->addSeparator();
|
ui->menuDebug->addSeparator();
|
||||||
ui->menuDebug->addAction(debugToolbar->actionStep);
|
ui->menuDebug->addAction(debugToolbar->actionStep);
|
||||||
ui->menuDebug->addAction(debugToolbar->actionStepOver);
|
ui->menuDebug->addAction(debugToolbar->actionStepOver);
|
||||||
|
@ -20,6 +20,7 @@ BacktraceWidget::BacktraceWidget(MainWindow *main, QAction *action) :
|
|||||||
modelBacktrace->setHorizontalHeaderItem(4, new QStandardItem(tr("Frame Size")));
|
modelBacktrace->setHorizontalHeaderItem(4, new QStandardItem(tr("Frame Size")));
|
||||||
viewBacktrace->setFont(Config()->getFont());
|
viewBacktrace->setFont(Config()->getFont());
|
||||||
viewBacktrace->setModel(modelBacktrace);
|
viewBacktrace->setModel(modelBacktrace);
|
||||||
|
viewBacktrace->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||||
ui->verticalLayout->addWidget(viewBacktrace);
|
ui->verticalLayout->addWidget(viewBacktrace);
|
||||||
|
|
||||||
connect(Core(), &CutterCore::refreshAll, this, &BacktraceWidget::updateContents);
|
connect(Core(), &CutterCore::refreshAll, this, &BacktraceWidget::updateContents);
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QToolButton>
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
#include <QList>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
|
||||||
DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
||||||
@ -13,6 +13,9 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
|||||||
main(main)
|
main(main)
|
||||||
{
|
{
|
||||||
setObjectName("debugToolbar");
|
setObjectName("debugToolbar");
|
||||||
|
setIconSize(QSize(20, 20));
|
||||||
|
|
||||||
|
// define icons
|
||||||
QIcon startDebugIcon = QIcon(":/img/icons/play_light_debug.svg");
|
QIcon startDebugIcon = QIcon(":/img/icons/play_light_debug.svg");
|
||||||
QIcon startEmulIcon = QIcon(":/img/icons/play_light_emul.svg");
|
QIcon startEmulIcon = QIcon(":/img/icons/play_light_emul.svg");
|
||||||
QIcon startAttachIcon = QIcon(":/img/icons/play_light_attach.svg");
|
QIcon startAttachIcon = QIcon(":/img/icons/play_light_attach.svg");
|
||||||
@ -24,7 +27,9 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
|||||||
QIcon stepIcon = QIcon(":/img/icons/step_light.svg");
|
QIcon stepIcon = QIcon(":/img/icons/step_light.svg");
|
||||||
QIcon stepOverIcon = QIcon(":/img/icons/step_over_light.svg");
|
QIcon stepOverIcon = QIcon(":/img/icons/step_over_light.svg");
|
||||||
QIcon stepOutIcon = QIcon(":/img/icons/step_out_light.svg");
|
QIcon stepOutIcon = QIcon(":/img/icons/step_out_light.svg");
|
||||||
|
QIcon restartIcon = QIcon(":/img/icons/spin_light.svg");
|
||||||
|
|
||||||
|
// define actions
|
||||||
actionStart = new QAction(startDebugIcon, tr("Start debug"), parent);
|
actionStart = new QAction(startDebugIcon, tr("Start debug"), parent);
|
||||||
actionStart->setShortcut(QKeySequence(Qt::Key_F9));
|
actionStart->setShortcut(QKeySequence(Qt::Key_F9));
|
||||||
actionStartEmul = new QAction(startEmulIcon, tr("Start emulation"), parent);
|
actionStartEmul = new QAction(startEmulIcon, tr("Start emulation"), parent);
|
||||||
@ -47,10 +52,12 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
|||||||
startButton->setPopupMode(QToolButton::MenuButtonPopup);
|
startButton->setPopupMode(QToolButton::MenuButtonPopup);
|
||||||
connect(startButton, &QToolButton::triggered, startButton, &QToolButton::setDefaultAction);
|
connect(startButton, &QToolButton::triggered, startButton, &QToolButton::setDefaultAction);
|
||||||
QMenu *startMenu = new QMenu;
|
QMenu *startMenu = new QMenu;
|
||||||
|
|
||||||
|
// only emulation is currently allowed
|
||||||
// startMenu->addAction(actionStart);
|
// startMenu->addAction(actionStart);
|
||||||
startMenu->addAction(actionStartEmul);
|
|
||||||
// startMenu->addAction(actionAttach);
|
// startMenu->addAction(actionAttach);
|
||||||
// startButton->setDefaultAction(actionStart);
|
// startButton->setDefaultAction(actionStart);
|
||||||
|
startMenu->addAction(actionStartEmul);
|
||||||
startButton->setDefaultAction(actionStartEmul);
|
startButton->setDefaultAction(actionStartEmul);
|
||||||
startButton->setMenu(startMenu);
|
startButton->setMenu(startMenu);
|
||||||
|
|
||||||
@ -65,14 +72,19 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
|||||||
continueUntilButton->setMenu(continueUntilMenu);
|
continueUntilButton->setMenu(continueUntilMenu);
|
||||||
continueUntilButton->setDefaultAction(actionContinueUntilMain);
|
continueUntilButton->setDefaultAction(actionContinueUntilMain);
|
||||||
|
|
||||||
|
// define toolbar widgets and actions
|
||||||
addWidget(startButton);
|
addWidget(startButton);
|
||||||
addAction(actionStop);
|
addAction(actionStop);
|
||||||
addAction(actionContinue);
|
addAction(actionContinue);
|
||||||
addWidget(continueUntilButton);
|
actionAllContinues = addWidget(continueUntilButton);
|
||||||
addAction(actionStep);
|
addAction(actionStep);
|
||||||
addAction(actionStepOver);
|
addAction(actionStepOver);
|
||||||
addAction(actionStepOut);
|
addAction(actionStepOut);
|
||||||
|
|
||||||
|
allActions = {actionStop, actionAllContinues, actionContinue, actionContinueUntilCall, actionContinueUntilMain, actionContinueUntilSyscall, actionStep, actionStepOut, actionStepOver};
|
||||||
|
// hide allactions
|
||||||
|
setAllActionsVisible(false);
|
||||||
|
|
||||||
connect(actionStop, &QAction::triggered, Core(), &CutterCore::stopDebug);
|
connect(actionStop, &QAction::triggered, Core(), &CutterCore::stopDebug);
|
||||||
connect(actionStop, &QAction::triggered, [ = ]() {
|
connect(actionStop, &QAction::triggered, [ = ]() {
|
||||||
actionContinue->setVisible(true);
|
actionContinue->setVisible(true);
|
||||||
@ -82,11 +94,18 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
|||||||
actionContinueUntilMain->setVisible(true);
|
actionContinueUntilMain->setVisible(true);
|
||||||
actionStepOut->setVisible(true);
|
actionStepOut->setVisible(true);
|
||||||
this->colorToolbar(false);
|
this->colorToolbar(false);
|
||||||
actionStop->setText("Stop debug");
|
actionStop->setText("Stop session");
|
||||||
|
actionStart->setText("Start debug");
|
||||||
|
actionStartEmul->setText("Start emulation");
|
||||||
|
actionStart->setIcon(startDebugIcon);
|
||||||
|
actionStartEmul->setIcon(startEmulIcon);
|
||||||
colorToolbar(false);
|
colorToolbar(false);
|
||||||
|
setAllActionsVisible(false);
|
||||||
});
|
});
|
||||||
connect(actionStep, &QAction::triggered, Core(), &CutterCore::stepDebug);
|
connect(actionStep, &QAction::triggered, Core(), &CutterCore::stepDebug);
|
||||||
connect(actionStart, &QAction::triggered, [=]() {
|
connect(actionStart, &QAction::triggered, [ = ]() {
|
||||||
|
setAllActionsVisible(true);
|
||||||
|
|
||||||
QString filename = Core()->getConfig("file.path").split(" ").first();
|
QString filename = Core()->getConfig("file.path").split(" ").first();
|
||||||
QFileInfo info(filename);
|
QFileInfo info(filename);
|
||||||
if (!Core()->currentlyDebugging && !info.isExecutable()) {
|
if (!Core()->currentlyDebugging && !info.isExecutable()) {
|
||||||
@ -98,17 +117,22 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
|
|||||||
colorToolbar(true);
|
colorToolbar(true);
|
||||||
actionAttach->setVisible(false);
|
actionAttach->setVisible(false);
|
||||||
actionStartEmul->setVisible(false);
|
actionStartEmul->setVisible(false);
|
||||||
|
actionStart->setText("Restart program");
|
||||||
|
actionStart->setIcon(restartIcon);
|
||||||
Core()->startDebug();
|
Core()->startDebug();
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(actionAttach, &QAction::triggered, this, &DebugToolbar::attachProcessDialog);
|
connect(actionAttach, &QAction::triggered, this, &DebugToolbar::attachProcessDialog);
|
||||||
connect(actionStartEmul, &QAction::triggered, Core(), &CutterCore::startEmulation);
|
connect(actionStartEmul, &QAction::triggered, Core(), &CutterCore::startEmulation);
|
||||||
connect(actionStartEmul, &QAction::triggered, [ = ]() {
|
connect(actionStartEmul, &QAction::triggered, [ = ]() {
|
||||||
actionContinue->setVisible(false);
|
setAllActionsVisible(true);
|
||||||
actionStart->setVisible(false);
|
actionStart->setVisible(false);
|
||||||
actionAttach->setVisible(false);
|
actionAttach->setVisible(false);
|
||||||
actionContinueUntilMain->setVisible(false);
|
actionContinueUntilMain->setVisible(false);
|
||||||
actionStepOut->setVisible(false);
|
actionStepOut->setVisible(false);
|
||||||
continueUntilButton->setDefaultAction(actionContinueUntilSyscall);
|
continueUntilButton->setDefaultAction(actionContinueUntilSyscall);
|
||||||
|
actionStartEmul->setText("Restart emulation");
|
||||||
|
actionStartEmul->setIcon(restartIcon);
|
||||||
actionStop->setText("Stop emulation");
|
actionStop->setText("Stop emulation");
|
||||||
colorToolbar(true);
|
colorToolbar(true);
|
||||||
});
|
});
|
||||||
@ -158,6 +182,7 @@ void DebugToolbar::attachProcessDialog()
|
|||||||
void DebugToolbar::attachProcess(int pid)
|
void DebugToolbar::attachProcess(int pid)
|
||||||
{
|
{
|
||||||
// hide unwanted buttons
|
// hide unwanted buttons
|
||||||
|
setAllActionsVisible(true);
|
||||||
colorToolbar(true);
|
colorToolbar(true);
|
||||||
actionStart->setVisible(false);
|
actionStart->setVisible(false);
|
||||||
actionStartEmul->setVisible(false);
|
actionStartEmul->setVisible(false);
|
||||||
@ -165,3 +190,10 @@ void DebugToolbar::attachProcess(int pid)
|
|||||||
// attach
|
// attach
|
||||||
Core()->attachDebug(pid);
|
Core()->attachDebug(pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DebugToolbar::setAllActionsVisible(bool visible)
|
||||||
|
{
|
||||||
|
for (QAction *action : allActions) {
|
||||||
|
action->setVisible(visible);
|
||||||
|
}
|
||||||
|
}
|
@ -22,13 +22,16 @@ public:
|
|||||||
QAction *actionStepOver;
|
QAction *actionStepOver;
|
||||||
QAction *actionStepOut;
|
QAction *actionStepOut;
|
||||||
QAction *actionStop;
|
QAction *actionStop;
|
||||||
|
QAction *actionAllContinues;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MainWindow *main;
|
MainWindow *main;
|
||||||
|
QList<QAction *> allActions;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void continueUntilMain();
|
void continueUntilMain();
|
||||||
void colorToolbar(bool p);
|
void colorToolbar(bool p);
|
||||||
void attachProcessDialog();
|
void attachProcessDialog();
|
||||||
void attachProcess(int pid);
|
void attachProcess(int pid);
|
||||||
|
void setAllActionsVisible(bool visible);
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user