- fix: Can't debug when debug a file while other file has breakpoints

- change: Don't save breakpoints for non-project files
This commit is contained in:
Roy Qu 2023-02-21 09:34:40 +08:00
parent 60db5a894b
commit fcca49e9e5
5 changed files with 24 additions and 10 deletions

View File

@ -3,7 +3,9 @@ Red Panda C++ Version 2.13
- fix: Only C/C++/GAS files can set breakpoints. - fix: Only C/C++/GAS files can set breakpoints.
- Enhancement: Don't show breakpoints/watch related menuitems in context menu for non-C/C++/GAS files. - Enhancement: Don't show breakpoints/watch related menuitems in context menu for non-C/C++/GAS files.
- Enhancement: Disable reformat code for non-C/C++ files. - Enhancement: Disable reformat code for non-C/C++ files.
- Enhancement: Support C11 ano - Enhancement: Support C11 anonymous struct/union
- fix: Can't debug when debug a file while other file has breakpoints
- change: Don't save breakpoints for non-project files
Red Panda C++ Version 2.12 Red Panda C++ Version 2.12

View File

@ -71,9 +71,9 @@ Debugger::~Debugger()
// delete mMemoryModel; // delete mMemoryModel;
} }
bool Debugger::start(int compilerSetIndex, const QString& inferior, const QStringList& binDirs) bool Debugger::start(int compilerSetIndex, const QString& inferior, const QStringList& binDirs, const QString& sourceFile)
{ {
mCurrentSourceFile = sourceFile;
Settings::PCompilerSet compilerSet = pSettings->compilerSets().getSet(compilerSetIndex); Settings::PCompilerSet compilerSet = pSettings->compilerSets().getSet(compilerSetIndex);
if (!compilerSet) { if (!compilerSet) {
compilerSet = pSettings->compilerSets().defaultSet(); compilerSet = pSettings->compilerSets().defaultSet();
@ -218,6 +218,7 @@ void Debugger::stop() {
} }
mReader->stopDebug(); mReader->stopDebug();
} }
mCurrentSourceFile="";
} }
void Debugger::cleanUpReader() void Debugger::cleanUpReader()
{ {
@ -347,7 +348,11 @@ void Debugger::addBreakpoint(int line, const QString &filename, bool forProject)
bp->timestamp = QDateTime::currentMSecsSinceEpoch(); bp->timestamp = QDateTime::currentMSecsSinceEpoch();
mBreakpointModel->addBreakpoint(bp,forProject); mBreakpointModel->addBreakpoint(bp,forProject);
if (mExecuting) { if (mExecuting) {
if (forProject && mBreakpointModel->isForProject()) {
sendBreakpointCommand(bp); sendBreakpointCommand(bp);
} else if (filename == mCurrentSourceFile) {
sendBreakpointCommand(bp);
}
} }
} }
@ -430,7 +435,11 @@ void Debugger::setBreakPointCondition(int index, const QString &condition, bool
void Debugger::sendAllBreakpointsToDebugger() void Debugger::sendAllBreakpointsToDebugger()
{ {
for (PBreakpoint breakpoint:mBreakpointModel->breakpoints(mBreakpointModel->isForProject())) { for (PBreakpoint breakpoint:mBreakpointModel->breakpoints(mBreakpointModel->isForProject())) {
if (mBreakpointModel->isForProject()) {
sendBreakpointCommand(breakpoint); sendBreakpointCommand(breakpoint);
} else if (breakpoint->filename == mCurrentSourceFile) {
sendBreakpointCommand(breakpoint);
}
} }
} }
@ -747,7 +756,9 @@ void Debugger::save(const QString &filename, const QString& projectFolder)
QJsonObject rootObj; QJsonObject rootObj;
rootObj["timestamp"] = QString("%1").arg(saveTimestamp); rootObj["timestamp"] = QString("%1").arg(saveTimestamp);
if (forProject) {
rootObj["breakpoints"] = mBreakpointModel->toJson(projectFolder); rootObj["breakpoints"] = mBreakpointModel->toJson(projectFolder);
}
rootObj["watchvars"] = mWatchModel->toJson(forProject); rootObj["watchvars"] = mWatchModel->toJson(forProject);
QJsonDocument doc; QJsonDocument doc;
doc.setObject(rootObj); doc.setObject(rootObj);

View File

@ -307,7 +307,7 @@ public:
explicit Debugger(QObject *parent = nullptr); explicit Debugger(QObject *parent = nullptr);
~Debugger(); ~Debugger();
// Play/pause // Play/pause
bool start(int compilerSetIndex, const QString& inferior, const QStringList& binDirs); bool start(int compilerSetIndex, const QString& inferior, const QStringList& binDirs, const QString& sourceFile=QString());
void sendCommand(const QString& command, const QString& params, void sendCommand(const QString& command, const QString& params,
DebugCommandSource source = DebugCommandSource::Other); DebugCommandSource source = DebugCommandSource::Other);
bool commandRunning(); bool commandRunning();
@ -415,6 +415,7 @@ private:
int mLeftPageIndexBackup; int mLeftPageIndexBackup;
qint64 mLastLoadtime; qint64 mLastLoadtime;
qint64 mProjectLastLoadtime; qint64 mProjectLastLoadtime;
QString mCurrentSourceFile;
}; };
class DebugTarget: public QThread { class DebugTarget: public QThread {

View File

@ -4810,7 +4810,7 @@ void Editor::reformat(bool doReparse)
} }
#endif #endif
//we must remove all breakpoints and syntax issues //we must remove all breakpoints and syntax issues
onLinesDeleted(1,document()->count()); // onLinesDeleted(1,document()->count());
QByteArray content = text().toUtf8(); QByteArray content = text().toUtf8();
QStringList args = pSettings->codeFormatter().getArguments(); QStringList args = pSettings->codeFormatter().getArguments();
//qDebug()<<args; //qDebug()<<args;

View File

@ -2273,7 +2273,7 @@ void MainWindow::debug()
prepareDebugger(); prepareDebugger();
QString filePath = debugFile.filePath().replace('\\','/'); QString filePath = debugFile.filePath().replace('\\','/');
if (!mDebugger->start(pSettings->compilerSets().defaultIndex(),filePath, binDirs)) if (!mDebugger->start(pSettings->compilerSets().defaultIndex(),filePath, binDirs,e->filename()))
return; return;
mDebugger->sendCommand("-file-exec-and-symbols", QString("\"%1\"").arg(filePath)); mDebugger->sendCommand("-file-exec-and-symbols", QString("\"%1\"").arg(filePath));
} }