diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index 4f85348..b2cb918 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -1454,7 +1454,7 @@ void SeerGdbWidget::handleGdbTerminateExecutable (bool confirm) { if (confirm) { int result = QMessageBox::warning(this, "Seer", QString("Terminate current session?"), - QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Cancel); + QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Ok); if (result == QMessageBox::Cancel) { break; diff --git a/src/SeerKeySettings.cpp b/src/SeerKeySettings.cpp index fa38bfe..38a3fe6 100644 --- a/src/SeerKeySettings.cpp +++ b/src/SeerKeySettings.cpp @@ -69,6 +69,8 @@ SeerKeySettings SeerKeySettings::populate () { keySettings.add("Stepi", SeerKeySetting("Stepi", QKeySequence::fromString("Ctrl+F6"), "Execute the next instruction. Step into functions.")); keySettings.add("Finish", SeerKeySetting("Finish", QKeySequence::fromString("F7"), "Finish the current function.")); keySettings.add("Interrupt", SeerKeySetting("Interrupt", QKeySequence::fromString("Ctrl+I"), "Interrupt the executing program.")); + keySettings.add("Terminate", SeerKeySetting("Terminate", QKeySequence::fromString("Alt+T"), "Terminate the debugging session.")); + keySettings.add("Restart", SeerKeySetting("Restart", QKeySequence::fromString("Alt+R"), "Restart the debugging session.")); keySettings.add("Debug", SeerKeySetting("Debug", QKeySequence::fromString("Alt+D"), "Open the debug dialog.")); keySettings.add("Arguments", SeerKeySetting("Arguments", QKeySequence::fromString("Alt+A"), "Open the argument dialog.")); keySettings.add("Quit", SeerKeySetting("Quit", QKeySequence::fromString("Alt+Q"), "Quit Seer.")); @@ -78,7 +80,6 @@ SeerKeySettings SeerKeySettings::populate () { keySettings.add("SearchLine", SeerKeySetting("SearchLine", QKeySequence::fromString("Ctrl+L"), "Seach for line number in the code editor.")); keySettings.add("AlternateDir", SeerKeySetting("AlternateDir", QKeySequence::fromString("Ctrl+O"), "Look for source file in an alternate directory.")); keySettings.add("ToggleBreakpoint", SeerKeySetting("ToggleBreakpoint", QKeySequence::fromString("Ctrl+B"), "Toggle the breakpoint status of current line.")); - keySettings.add("ToggleRecordDirection", SeerKeySetting("ToggleRecordDirection", QKeySequence::fromString("Ctrl+D"), "Toggle the record playback direction.")); keySettings.add("ReverseContinue", SeerKeySetting("ReverseContinue", QKeySequence::fromString("Shift+F8"), "Continue execution of the program in reverse.")); keySettings.add("ReverseNext", SeerKeySetting("ReverseNext", QKeySequence::fromString("Shift+F5"), "Execute the previous line. Step over functions.")); diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index 2f65f83..ea612d4 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -451,8 +451,8 @@ void SeerMainWindow::launchExecutable (const QString& launchMode, const QString& actionGdbTerminate->setVisible(false); actionGdbLaunch->setVisible(false); - actionControlRestart->setVisible(false); - actionControlTerminate->setVisible(false); + actionControlRestart->setVisible(true); + actionControlTerminate->setVisible(true); actionControlInterrupt->setVisible(true); if (launchMode == "run") { @@ -860,6 +860,18 @@ void SeerMainWindow::handleTerminateExecutable () { void SeerMainWindow::handleRestartExecutable () { + // Prompt if there's already a gdb running. + if (gdbWidget->isGdbRuning() == true) { + + int result = QMessageBox::warning(this, "Seer", + QString("Restart current session?"), + QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Ok); + + if (result == QMessageBox::Cancel) { + return; + } + } + if (gdbWidget->isGdbRuning() == false && gdbWidget->hasBackupLaunchMode()) { gdbWidget->restoreLaunchMode(); } @@ -939,7 +951,8 @@ void SeerMainWindow::handleGdbStateChanged () { // Launch and Restart. Applies to all. actionGdbLaunch->setVisible(false); actionGdbRestart->setVisible(false); - actionControlRestart->setVisible(false); + actionControlRestart->setVisible(true); + actionControlTerminate->setVisible(true); // Run mode if (gdbWidget->executableLaunchMode() == "run" || gdbWidget->executableLaunchMode() == "start" || @@ -948,7 +961,6 @@ void SeerMainWindow::handleGdbStateChanged () { actionGdbTerminate->setVisible(true); actionGdbTerminate->setText("Terminate"); actionGdbTerminate->setToolTip("Terminate the current debugging session."); - actionControlTerminate->setVisible(true); actionControlTerminate->setText("Terminate"); actionControlTerminate->setToolTip("Terminate the current debugging session."); @@ -958,7 +970,6 @@ void SeerMainWindow::handleGdbStateChanged () { actionGdbTerminate->setVisible(true); actionGdbTerminate->setText("Detach"); actionGdbTerminate->setToolTip("Detach from the current debugging session."); - actionControlTerminate->setVisible(true); actionControlTerminate->setText("Detach"); actionControlTerminate->setToolTip("Detach from the current debugging session."); @@ -968,7 +979,6 @@ void SeerMainWindow::handleGdbStateChanged () { actionGdbTerminate->setVisible(true); actionGdbTerminate->setText("Disconnect"); actionGdbTerminate->setToolTip("Disconnect from the current debugging session."); - actionControlTerminate->setVisible(true); actionControlTerminate->setText("Disconnect"); actionControlTerminate->setToolTip("Disconnect from the current debugging session."); @@ -993,7 +1003,8 @@ void SeerMainWindow::handleGdbStateChanged () { // Hide terminate. Applies to all. actionGdbTerminate->setVisible(false); - actionControlTerminate->setVisible(false); + actionControlRestart->setVisible(true); + actionControlTerminate->setVisible(true); if (gdbWidget->backupLaunchMode() == "run" || gdbWidget->backupLaunchMode() == "start" || gdbWidget->backupLaunchMode() == "rr" || gdbWidget->backupLaunchMode() == "corefile") { @@ -1001,7 +1012,6 @@ void SeerMainWindow::handleGdbStateChanged () { actionGdbRestart->setVisible(true); actionGdbRestart->setText("Restart"); actionGdbRestart->setToolTip("Restart the current debugging session."); - actionControlRestart->setVisible(true); actionControlRestart->setText("Restart"); actionControlRestart->setToolTip("Restart the current debugging session."); @@ -1009,7 +1019,6 @@ void SeerMainWindow::handleGdbStateChanged () { actionGdbRestart->setVisible(true); actionGdbRestart->setText("Reattach"); actionGdbRestart->setToolTip("Reattach the current debugging session."); - actionControlRestart->setVisible(true); actionControlRestart->setText("Reattach"); actionControlRestart->setToolTip("Reattach the current debugging session."); @@ -1017,7 +1026,6 @@ void SeerMainWindow::handleGdbStateChanged () { actionGdbRestart->setVisible(true); actionGdbRestart->setText("Reconnect"); actionGdbRestart->setToolTip("Reconnect the current debugging session."); - actionControlRestart->setVisible(true); actionControlRestart->setText("Reconnect"); actionControlRestart->setToolTip("Reconnect the current debugging session."); @@ -1778,6 +1786,7 @@ const SeerKeySettings SeerMainWindow::keySettings () const { void SeerMainWindow::refreshShortCuts () { // Dynamically change tool tip for 'Restart' depending on debug mode. + if (_keySettings.has("Restart")) { SeerKeySetting setting = _keySettings.get("Restart"); @@ -1787,6 +1796,15 @@ void SeerMainWindow::refreshShortCuts () { actionControlRestart->setShortcut(setting._sequence); } + if (_keySettings.has("Terminate")) { + + SeerKeySetting setting = _keySettings.get("Terminate"); + + actionGdbTerminate->setToolTip(setting._description); + actionGdbTerminate->setText(setting._action + " (" + setting._sequence.toString() + ")"); + actionControlTerminate->setShortcut(setting._sequence); + } + if (_keySettings.has("Next")) { SeerKeySetting setting = _keySettings.get("Next"); diff --git a/src/SeerMainWindow.ui b/src/SeerMainWindow.ui index 9f261f7..bc9244e 100644 --- a/src/SeerMainWindow.ui +++ b/src/SeerMainWindow.ui @@ -336,10 +336,13 @@ :/seer/resources/RelaxLightIcons/view-refresh.svg:/seer/resources/RelaxLightIcons/view-refresh.svg - + Restart + + + Restart the debugging session - Start the program in GDB. Honor breakpoints, if any. + Restart the debugging session. Honor breakpoints, if any. @@ -716,13 +719,13 @@ :/seer/resources/RelaxLightIcons/system-shutdown.svg:/seer/resources/RelaxLightIcons/system-shutdown.svg - + Terminate - + Terminate the debugging session - + Terminate the debugging session. QAction::NoRole diff --git a/tests/recursive_test/src/main.cpp b/tests/recursive_test/src/main.cpp index 1e06c30..98ca25e 100644 --- a/tests/recursive_test/src/main.cpp +++ b/tests/recursive_test/src/main.cpp @@ -110,4 +110,5 @@ int main() { std::this_thread::sleep_for(std::chrono::seconds(2)); } return 0; -} \ No newline at end of file +} +