- fix: watch and local infos not updated when changing current frame in the call stack panel
- enhancement: pause the debugging program (The debugger should work under gdb server mode, which is turned off by default in windows)
This commit is contained in:
parent
317db42876
commit
96ab0890ba
5
NEWS.md
5
NEWS.md
|
@ -1,3 +1,8 @@
|
|||
Version 0.12.4 For Dev-C++ 7 Beta
|
||||
- change: add copyright infos to each source file
|
||||
- fix: watch and local infos not updated when changing current frame in the call stack panel
|
||||
- enhancement: pause the debugging program (The debugger should work under gdb server mode, which is turned off by default in windows)
|
||||
|
||||
Version 0.12.3 For Dev-C++ 7 Beta
|
||||
- enhancement: basic linux compatibility
|
||||
- enhancement: debug with gdb server
|
||||
|
|
|
@ -243,6 +243,13 @@ bool Debugger::inferiorRunning()
|
|||
return false;
|
||||
}
|
||||
|
||||
void Debugger::interrupt()
|
||||
{
|
||||
sendCommand("-exec-interrupt", "");
|
||||
QTimer::singleShot(1000,this, &Debugger::interruptRefresh);
|
||||
|
||||
}
|
||||
|
||||
void Debugger::addBreakpoint(int line, const Editor* editor)
|
||||
{
|
||||
addBreakpoint(line,editor->filename());
|
||||
|
@ -401,6 +408,11 @@ void Debugger::fetchVarChildren(const QString &varName)
|
|||
}
|
||||
}
|
||||
|
||||
void Debugger::interruptRefresh()
|
||||
{
|
||||
sendCommand("noop","");
|
||||
}
|
||||
|
||||
void Debugger::removeWatchVars(bool deleteparent)
|
||||
{
|
||||
if (deleteparent) {
|
||||
|
@ -542,7 +554,9 @@ void Debugger::syncFinishedParsing()
|
|||
return;
|
||||
}
|
||||
|
||||
if (mReader->signalReceived()) {
|
||||
if (mReader->signalReceived()
|
||||
&& mReader->signalName()!="SIGINT"
|
||||
&& mReader->signalName()!="SIGTRAP") {
|
||||
SignalMessageDialog dialog(pMainWindow);
|
||||
dialog.setOpenCPUInfo(pSettings->debugger().openCPUInfoWhenSignaled());
|
||||
dialog.setMessage(
|
||||
|
@ -553,38 +567,8 @@ void Debugger::syncFinishedParsing()
|
|||
if (result == QDialog::Accepted && dialog.openCPUInfo()) {
|
||||
pMainWindow->showCPUInfoDialog();
|
||||
}
|
||||
|
||||
//SignalDialog := CreateMessageDialog(fSignal, mtError, [mbOk]);
|
||||
//SignalCheck := TCheckBox.Create(SignalDialog);
|
||||
|
||||
//// Display it on top of everything
|
||||
//SignalDialog.FormStyle := fsStayOnTop;
|
||||
|
||||
//SignalDialog.Height := 150;
|
||||
|
||||
//with SignalCheck do begin
|
||||
// Parent := SignalDialog;
|
||||
// Caption := 'Show CPU window';
|
||||
// Top := Parent.ClientHeight - 22;
|
||||
// Left := 8;
|
||||
// Width := Parent.ClientWidth - 16;
|
||||
// Checked := devData.ShowCPUSignal;
|
||||
//end;
|
||||
|
||||
//MessageBeep(MB_ICONERROR);
|
||||
//if SignalDialog.ShowModal = ID_OK then begin
|
||||
// devData.ShowCPUSignal := SignalCheck.Checked;
|
||||
// if SignalCheck.Checked and not Assigned(CPUForm) then begin
|
||||
// MainForm.ViewCPUItemClick(nil);
|
||||
// spawnedcpuform := true;
|
||||
// end;
|
||||
//end;
|
||||
|
||||
//SignalDialog.Free;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// CPU form updates itself when spawned, don't update twice!
|
||||
if ((mReader->updateCPUInfo() && !spawnedcpuform) && (pMainWindow->cpuDialog()!=nullptr)) {
|
||||
pMainWindow->cpuDialog()->updateInfo();
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <QQueue>
|
||||
#include <QSemaphore>
|
||||
#include <QThread>
|
||||
#include <QTimer>
|
||||
#include <memory>
|
||||
#include "gdbmiresultparser.h"
|
||||
|
||||
|
@ -212,6 +213,7 @@ public:
|
|||
DebugCommandSource source = DebugCommandSource::Other);
|
||||
bool commandRunning();
|
||||
bool inferiorRunning();
|
||||
void interrupt();
|
||||
|
||||
//breakpoints
|
||||
void addBreakpoint(int line, const Editor* editor);
|
||||
|
@ -273,6 +275,7 @@ private slots:
|
|||
void updateRegisterValues(const QHash<int,QString>& values);
|
||||
void refreshWatchVars();
|
||||
void fetchVarChildren(const QString& varName);
|
||||
void interruptRefresh();
|
||||
private:
|
||||
bool mExecuting;
|
||||
bool mCommandChanged;
|
||||
|
|
|
@ -998,7 +998,7 @@ bool Editor::event(QEvent *event)
|
|||
s = wordAtRowCol(p);
|
||||
break;
|
||||
case TipType::Identifier:
|
||||
if (pMainWindow->debugger()->executing())
|
||||
if (pMainWindow->debugger()->executing() && !pMainWindow->debugger()->inferiorRunning())
|
||||
s = getWordAtPosition(this,p, pBeginPos,pEndPos, WordPurpose::wpEvaluation); // debugging
|
||||
else if (//devEditor.ParserHints and
|
||||
!mCompletionPopup->isVisible()
|
||||
|
@ -3042,10 +3042,10 @@ Editor::TipType Editor::getTipType(QPoint point, BufferCoord& pos)
|
|||
// do not allow when dragging selection
|
||||
if (isPointInSelection(pos))
|
||||
return TipType::Selection;
|
||||
} else if (attr == highlighter()->identifierAttribute())
|
||||
return TipType::Identifier;
|
||||
else if (attr->name() == SYNS_AttrPreprocessor)
|
||||
} else if (mParser && mParser->isIncludeLine(lines()->getString(pos.Line-1))) {
|
||||
return TipType::Preprocessor;
|
||||
}else if (attr == highlighter()->identifierAttribute())
|
||||
return TipType::Identifier;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -209,5 +209,6 @@
|
|||
<file>images/newlook/actions/08Problem_03Properties.svg</file>
|
||||
<file>images/newlook/actions/08Problem_04EditSource.svg</file>
|
||||
<file>images/newlook/actions/08Problem_05RunCases.svg</file>
|
||||
<file>images/newlook/actions/05Run-16Interrupt.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -135,7 +135,7 @@ void IconsManager::updateActionIcons(const QString iconSet, int size)
|
|||
mIconPixmaps.insert(ACTION_RUN_REMOVE_WATCH, createSVGIcon(iconFolder+"05Run-13RemoveWatch.svg",size,size));
|
||||
mIconPixmaps.insert(ACTION_RUN_STEP_OVER_INSTRUCTION, createSVGIcon(iconFolder+"05Run-14StepOverInstruction.svg",size,size));
|
||||
mIconPixmaps.insert(ACTION_RUN_STEP_INTO_INSTRUCTION, createSVGIcon(iconFolder+"05Run-15StepIntoInstruction.svg",size,size));
|
||||
|
||||
mIconPixmaps.insert(ACTION_RUN_INTERRUPT, createSVGIcon(iconFolder+"05Run-16Interrupt.svg",size,size));
|
||||
|
||||
mIconPixmaps.insert(ACTION_VIEW_MAXIMUM, createSVGIcon(iconFolder+"06View-01Maximum.svg",size,size));
|
||||
mIconPixmaps.insert(ACTION_VIEW_CLASSBROWSER, createSVGIcon(iconFolder+"06View-02ClassBrowser.svg",size,size));
|
||||
|
|
|
@ -123,6 +123,7 @@ public:
|
|||
ACTION_RUN_REMOVE_WATCH,
|
||||
ACTION_RUN_STEP_OVER_INSTRUCTION,
|
||||
ACTION_RUN_STEP_INTO_INSTRUCTION,
|
||||
ACTION_RUN_INTERRUPT,
|
||||
|
||||
ACTION_VIEW_MAXIMUM,
|
||||
ACTION_VIEW_CLASSBROWSER,
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="100"
|
||||
height="100"
|
||||
viewBox="0 0 26.458333 26.458333"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
sodipodi:docname="05Run-16Pause.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview7"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.2891301"
|
||||
inkscape:cx="230.38793"
|
||||
inkscape:cy="193.54137"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1001"
|
||||
inkscape:window-x="-9"
|
||||
inkscape:window-y="-9"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1"
|
||||
units="px"
|
||||
width="100px"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:snap-midpoints="true" />
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="linearGradient3056"
|
||||
inkscape:swatch="gradient">
|
||||
<stop
|
||||
style="stop-color:#45c200;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3052" />
|
||||
<stop
|
||||
style="stop-color:#45c200;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop3054" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="图层 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:#09e3e3;stroke-width:0.79375;stroke-linecap:round;stroke:#000000;stroke-opacity:1;fill-opacity:1"
|
||||
id="rect1259"
|
||||
width="7.5939455"
|
||||
height="20.216314"
|
||||
x="3.1812472"
|
||||
y="3.0946889" />
|
||||
<rect
|
||||
style="fill:#09e3e3;stroke-width:0.79375;stroke-linecap:round;stroke:#000000;stroke-opacity:1;fill-opacity:1"
|
||||
id="rect1259-9"
|
||||
width="7.5939455"
|
||||
height="20.216314"
|
||||
x="16.008858"
|
||||
y="3.0946889" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
|
@ -1189,6 +1189,7 @@ void MainWindow::updateActionIcons()
|
|||
ui->actionRebuild->setIcon(pIconsManager->getIcon(IconsManager::ACTION_RUN_REBUILD));
|
||||
ui->actionRun_Parameters->setIcon(pIconsManager->getIcon(IconsManager::ACTION_RUN_OPTIONS));
|
||||
ui->actionDebug->setIcon(pIconsManager->getIcon(IconsManager::ACTION_RUN_DEBUG));
|
||||
ui->actionInterrupt->setIcon(pIconsManager->getIcon(IconsManager::ACTION_RUN_INTERRUPT));
|
||||
ui->actionStep_Over->setIcon(pIconsManager->getIcon(IconsManager::ACTION_RUN_STEP_OVER));
|
||||
ui->actionStep_Into->setIcon(pIconsManager->getIcon(IconsManager::ACTION_RUN_STEP_INTO));
|
||||
ui->actionStep_Out->setIcon(pIconsManager->getIcon(IconsManager::ACTION_RUN_STEP_OUT));
|
||||
|
@ -1675,6 +1676,7 @@ void MainWindow::debug()
|
|||
mDebugger->sendAllBreakpointsToDebugger();
|
||||
|
||||
// Run the debugger
|
||||
mDebugger->sendCommand("-gdb-set", "mi-async on");
|
||||
mDebugger->sendCommand("-enable-pretty-printing","");
|
||||
mDebugger->sendCommand("-data-list-register-names","");
|
||||
mDebugger->sendCommand("-gdb-set", "width 0"); // don't wrap output, very annoying
|
||||
|
@ -3285,6 +3287,7 @@ void MainWindow::onEditorTabContextMenu(QTabWidget* tabWidget, const QPoint &pos
|
|||
|
||||
void MainWindow::disableDebugActions()
|
||||
{
|
||||
ui->actionInterrupt->setEnabled(false);
|
||||
ui->actionStep_Into->setEnabled(false);
|
||||
ui->actionStep_Over->setEnabled(false);
|
||||
ui->actionStep_Out->setEnabled(false);
|
||||
|
@ -3299,10 +3302,12 @@ void MainWindow::disableDebugActions()
|
|||
|
||||
void MainWindow::enableDebugActions()
|
||||
{
|
||||
ui->actionInterrupt->setEnabled(mDebugger->inferiorRunning());
|
||||
ui->actionStep_Into->setEnabled(!mDebugger->inferiorRunning());
|
||||
ui->actionStep_Over->setEnabled(!mDebugger->inferiorRunning());
|
||||
ui->actionStep_Out->setEnabled(!mDebugger->inferiorRunning());
|
||||
ui->actionRun_To_Cursor->setEnabled(!mDebugger->inferiorRunning());
|
||||
if (pSettings->debugger().useGDBServer())
|
||||
ui->actionContinue->setEnabled(!mDebugger->inferiorRunning());
|
||||
ui->cbEvaluate->setEnabled(!mDebugger->inferiorRunning());
|
||||
ui->cbMemoryAddress->setEnabled(!mDebugger->inferiorRunning());
|
||||
|
@ -4805,6 +4810,12 @@ void MainWindow::on_tblStackTrace_doubleClicked(const QModelIndex &index)
|
|||
if (e) {
|
||||
e->setCaretPositionAndActivate(trace->line,1);
|
||||
}
|
||||
mDebugger->sendCommand("-stack-select-frame", QString("%1").arg(trace->level));
|
||||
mDebugger->sendCommand("-stack-list-variables", "--all-values");
|
||||
mDebugger->sendCommand("-var-update", "--all-values *");
|
||||
if (this->mCPUDialog) {
|
||||
this->mCPUDialog->updateInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6026,3 +6037,12 @@ void MainWindow::on_btnCaseValidateOptions_clicked()
|
|||
);
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::on_actionInterrupt_triggered()
|
||||
{
|
||||
if (mDebugger->executing()) {
|
||||
//WatchView.Items.BeginUpdate();
|
||||
mDebugger->interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -550,6 +550,8 @@ private slots:
|
|||
|
||||
void on_btnCaseValidateOptions_clicked();
|
||||
|
||||
void on_actionInterrupt_triggered();
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
EditorList *mEditorList;
|
||||
|
|
|
@ -540,7 +540,6 @@
|
|||
<widget class="IssuesTable" name="tableIssues">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -1398,7 +1397,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1114</width>
|
||||
<height>26</height>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
|
@ -1438,6 +1437,7 @@
|
|||
<addaction name="actionRun_Parameters"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionDebug"/>
|
||||
<addaction name="actionInterrupt"/>
|
||||
<addaction name="actionStep_Over"/>
|
||||
<addaction name="actionStep_Into"/>
|
||||
<addaction name="actionStep_Out"/>
|
||||
|
@ -1657,6 +1657,7 @@
|
|||
<bool>false</bool>
|
||||
</attribute>
|
||||
<addaction name="actionDebug"/>
|
||||
<addaction name="actionInterrupt"/>
|
||||
<addaction name="actionStep_Over"/>
|
||||
<addaction name="actionStep_Into"/>
|
||||
<addaction name="actionStep_Out"/>
|
||||
|
@ -2667,6 +2668,15 @@
|
|||
<string>Ctrl+Backspace</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionInterrupt">
|
||||
<property name="icon">
|
||||
<iconset resource="icons.qrc">
|
||||
<normaloff>:/icons/images/newlook24/093-pause.png</normaloff>:/icons/images/newlook24/093-pause.png</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Interrupt</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
|
|
@ -19,6 +19,6 @@
|
|||
|
||||
#include <QObject>
|
||||
|
||||
#define DEVCPP_VERSION "beta.0.12.3"
|
||||
#define DEVCPP_VERSION "beta.0.12.4"
|
||||
|
||||
#endif // VERSION_H
|
||||
|
|
|
@ -58,18 +58,11 @@
|
|||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="plainText">
|
||||
<string> This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
<string> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.</string>
|
||||
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
Loading…
Reference in New Issue