DAP: Add enable/disable breakpoint support

Change-Id: Ice1c17e1c1e257d9f828bb6a54c643f7ecf7b387
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Artem Sokolovskii
2023-08-10 12:25:59 +02:00
parent ae51dedbd1
commit b01fcf5e7a
4 changed files with 63 additions and 19 deletions

View File

@@ -378,8 +378,13 @@ void DapEngine::insertBreakpoint(const Breakpoint &bp)
QTC_CHECK(bp->state() == BreakpointInsertionRequested);
notifyBreakpointInsertProceeding(bp);
const BreakpointParameters &params = bp->requestedParameters();
dapInsertBreakpoint(bp);
}
void DapEngine::dapInsertBreakpoint(const Breakpoint &bp)
{
bp->setResponseId(QString::number(m_nextBreakpointId++));
const BreakpointParameters &params = bp->requestedParameters();
QJsonArray breakpoints;
for (const auto &breakpoint : breakHandler()->breakpoints()) {
@@ -401,30 +406,21 @@ void DapEngine::insertBreakpoint(const Breakpoint &bp)
}}
});
notifyBreakpointInsertOk(bp);
qCDebug(dapEngineLog) << "insertBreakpoint" << bp->modelId() << bp->responseId();
}
void DapEngine::updateBreakpoint(const Breakpoint &bp)
{
BreakpointParameters parameters = bp->requestedParameters();
notifyBreakpointChangeProceeding(bp);
// QTC_ASSERT(bp, return);
// const BreakpointState state = bp->state();
// if (QTC_GUARD(state == BreakpointUpdateRequested))
// if (bp->responseId().isEmpty()) // FIXME postpone update somehow (QTimer::singleShot?)
// return;
qDebug() << "updateBreakpoint";
// // FIXME figure out what needs to be changed (there might be more than enabled state)
// const BreakpointParameters &requested = bp->requestedParameters();
// if (requested.enabled != bp->isEnabled()) {
// if (bp->isEnabled())
// postDirectCommand("disable " + bp->responseId());
// else
// postDirectCommand("enable " + bp->responseId());
// bp->setEnabled(!bp->isEnabled());
// }
// // Pretend it succeeds without waiting for response.
notifyBreakpointChangeOk(bp);
if (parameters.enabled != bp->isEnabled()) {
if (bp->isEnabled())
dapRemoveBreakpoint(bp);
else
dapInsertBreakpoint(bp);
}
}
void DapEngine::removeBreakpoint(const Breakpoint &bp)
@@ -433,6 +429,11 @@ void DapEngine::removeBreakpoint(const Breakpoint &bp)
QTC_CHECK(bp->state() == BreakpointRemoveRequested);
notifyBreakpointRemoveProceeding(bp);
dapRemoveBreakpoint(bp);
}
void DapEngine::dapRemoveBreakpoint(const Breakpoint &bp)
{
const BreakpointParameters &params = bp->requestedParameters();
QJsonArray breakpoints;
@@ -455,7 +456,6 @@ void DapEngine::removeBreakpoint(const Breakpoint &bp)
});
qCDebug(dapEngineLog) << "removeBreakpoint" << bp->modelId() << bp->responseId();
notifyBreakpointRemoveOk(bp);
}
void DapEngine::loadSymbols(const Utils::FilePath &/*moduleName*/)
@@ -870,6 +870,16 @@ void DapEngine::handleBreakpointEvent(const QJsonObject &event)
QString::number(breakpoint.value("id").toInt()));
qCDebug(dapEngineLog) << "breakpoint id :" << breakpoint.value("id").toInt();
if (bp) {
BreakpointParameters parameters = bp->requestedParameters();
if (parameters.enabled != bp->isEnabled()) {
parameters.pending = false;
bp->setParameters(parameters);
notifyBreakpointChangeOk(bp);
return;
}
}
if (body.value("reason").toString() == "new") {
if (breakpoint.value("verified").toBool()) {
notifyBreakpointInsertOk(bp);