diff --git a/src/Cutter.cpp b/src/Cutter.cpp
index 9b4a2b16..356d1db4 100644
--- a/src/Cutter.cpp
+++ b/src/Cutter.cpp
@@ -786,6 +786,22 @@ void CutterCore::continueUntilDebug(QString offset)
emit registersChanged();
}
+void CutterCore::continueUntilCall()
+{
+ cmd("dcc");
+ QString programCounterValue = cmd("dr?`drn pc`").trimmed();
+ seek(programCounterValue);
+ emit registersChanged();
+}
+
+void CutterCore::continueUntilSyscall()
+{
+ cmd("dcs");
+ QString programCounterValue = cmd("dr?`drn pc`").trimmed();
+ seek(programCounterValue);
+ emit registersChanged();
+}
+
void CutterCore::stepDebug()
{
cmd("ds");
diff --git a/src/Cutter.h b/src/Cutter.h
index 91ae422a..e5bc3c14 100644
--- a/src/Cutter.h
+++ b/src/Cutter.h
@@ -471,6 +471,8 @@ public:
void startDebug();
void stopDebug();
void continueDebug();
+ void continueUntilCall();
+ void continueUntilSyscall();
void continueUntilDebug(QString offset);
void stepDebug();
void stepOverDebug();
diff --git a/src/img/icons/continue_until_call.svg b/src/img/icons/continue_until_call.svg
new file mode 100644
index 00000000..bf3a8a38
--- /dev/null
+++ b/src/img/icons/continue_until_call.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/src/img/icons/continue_until_syscall.svg b/src/img/icons/continue_until_syscall.svg
new file mode 100644
index 00000000..fee5a3a5
--- /dev/null
+++ b/src/img/icons/continue_until_syscall.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/src/resources.qrc b/src/resources.qrc
index 71bfebea..fd1fe886 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -23,6 +23,8 @@
img/icons/media-stop_light.svg
img/icons/media-skip-forward_light.svg
img/icons/continue_until_main.svg
+ img/icons/continue_until_call.svg
+ img/icons/continue_until_syscall.svg
img/icons/step_light.svg
img/icons/step_over_light.svg
img/icons/cloud.svg
diff --git a/src/themes/qdarkstyle/style.qss b/src/themes/qdarkstyle/style.qss
index 8718ec64..31f64b37 100644
--- a/src/themes/qdarkstyle/style.qss
+++ b/src/themes/qdarkstyle/style.qss
@@ -985,11 +985,17 @@ QToolButton[popupMode="2"] {
border: 1px #76797C;
}
-QToolButton:hover,
-QToolButton::menu-button:hover {
+QToolButton:hover {
+ background-color: transparent;
+ border: 1px solid #3daee9;
+}
+
+QToolButton::menu-button:hover {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ width: 16px;
background-color: transparent;
border: 1px solid #3daee9;
- padding: 5px;
}
QToolButton:checked,
@@ -997,7 +1003,6 @@ QToolButton:pressed,
QToolButton::menu-button:pressed {
background-color: #3daee9;
border: 1px solid #3daee9;
- padding: 5px;
}
diff --git a/src/widgets/DebugToolbar.cpp b/src/widgets/DebugToolbar.cpp
index 91c78e26..34ee01e0 100644
--- a/src/widgets/DebugToolbar.cpp
+++ b/src/widgets/DebugToolbar.cpp
@@ -3,6 +3,8 @@
#include
#include
+#include
+#include
DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
QToolBar(parent),
@@ -12,20 +14,36 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
QIcon startIcon = QIcon(":/img/icons/play_light.svg");
QIcon stopIcon = QIcon(":/img/icons/media-stop_light.svg");
QIcon continueIcon = QIcon(":/img/icons/media-skip-forward_light.svg");
- QIcon continueUntilIcon = QIcon(":/img/icons/continue_until_main.svg");
+ QIcon continueUntilMainIcon = QIcon(":/img/icons/continue_until_main.svg");
+ QIcon continueUntilCallIcon = QIcon(":/img/icons/continue_until_call.svg");
+ QIcon continueUntilSyscallIcon = QIcon(":/img/icons/continue_until_syscall.svg");
QIcon stepIcon = QIcon(":/img/icons/step_light.svg");
QIcon stepOverIcon = QIcon(":/img/icons/step_over_light.svg");
QAction *actionStart = new QAction(startIcon, tr("Start debug"), parent);
QAction *actionStop = new QAction(stopIcon, tr("Stop debug"), parent);
QAction *actionContinue = new QAction(continueIcon, tr("Continue"), parent);
- QAction *actionContinueUntilMain = new QAction(continueUntilIcon, tr("Continue until main"), parent);
+ QAction *actionContinueUntilMain = new QAction(continueUntilMainIcon, tr("Continue until main"), parent);
+ QAction *actionContinueUntilCall = new QAction(continueUntilCallIcon, tr("Continue until call"), parent);
+ QAction *actionContinueUntilSyscall = new QAction(continueUntilSyscallIcon, tr("Continue until syscall"), parent);
QAction *actionStep = new QAction(stepIcon, tr("Step"), parent);
QAction *actionStepOver = new QAction(stepOverIcon, tr("Step over"), parent);
+
+ QToolButton *continueUntilButton = new QToolButton;
+ continueUntilButton->setPopupMode(QToolButton::MenuButtonPopup);
+ connect(continueUntilButton, &QToolButton::triggered, continueUntilButton, &QToolButton::setDefaultAction);
+
+ QMenu *continueUntilMenu = new QMenu;
+ continueUntilMenu->addAction(actionContinueUntilMain);
+ continueUntilMenu->addAction(actionContinueUntilCall);
+ continueUntilMenu->addAction(actionContinueUntilSyscall);
+ continueUntilButton->setMenu(continueUntilMenu);
+ continueUntilButton->setDefaultAction(actionContinueUntilMain);
+
addAction(actionStart);
addAction(actionStop);
addAction(actionContinue);
- addAction(actionContinueUntilMain);
+ addWidget(continueUntilButton);
addAction(actionStep);
addAction(actionStepOver);
@@ -35,6 +53,8 @@ DebugToolbar::DebugToolbar(MainWindow *main, QWidget *parent) :
connect(actionStepOver, &QAction::triggered, Core(), &CutterCore::stepOverDebug);
connect(actionContinue, &QAction::triggered, Core(), &CutterCore::continueDebug);
connect(actionContinueUntilMain, &QAction::triggered, this, &DebugToolbar::continueUntilMain);
+ connect(actionContinueUntilCall, &QAction::triggered, Core(), &CutterCore::continueUntilCall);
+ connect(actionContinueUntilSyscall, &QAction::triggered, Core(),&CutterCore::continueUntilSyscall);
}
void DebugToolbar::continueUntilMain()