forked from qt-creator/qt-creator
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:
@@ -136,4 +136,30 @@ bool CMakeDapEngine::hasCapability(unsigned cap) const
|
||||
/*| RunToLineCapability*/); // disable while the #25176 bug is not fixed
|
||||
}
|
||||
|
||||
void CMakeDapEngine::insertBreakpoint(const Breakpoint &bp)
|
||||
{
|
||||
DapEngine::insertBreakpoint(bp);
|
||||
notifyBreakpointInsertOk(bp); // Needed for CMake support issue:25176
|
||||
}
|
||||
|
||||
void CMakeDapEngine::removeBreakpoint(const Breakpoint &bp)
|
||||
{
|
||||
DapEngine::removeBreakpoint(bp);
|
||||
notifyBreakpointRemoveOk(bp); // Needed for CMake support issue:25176
|
||||
}
|
||||
|
||||
void CMakeDapEngine::updateBreakpoint(const Breakpoint &bp)
|
||||
{
|
||||
DapEngine::updateBreakpoint(bp);
|
||||
|
||||
/* Needed for CMake support issue:25176 */
|
||||
BreakpointParameters parameters = bp->requestedParameters();
|
||||
if (parameters.enabled != bp->isEnabled()) {
|
||||
parameters.pending = false;
|
||||
bp->setParameters(parameters);
|
||||
}
|
||||
notifyBreakpointChangeOk(bp);
|
||||
/* Needed for CMake support issue:25176 */
|
||||
}
|
||||
|
||||
} // namespace Debugger::Internal
|
||||
|
||||
@@ -16,6 +16,12 @@ private:
|
||||
void handleDapStarted() override;
|
||||
void setupEngine() override;
|
||||
|
||||
/* Needed for CMake support issue:25176 */
|
||||
void insertBreakpoint(const Breakpoint &bp) override;
|
||||
void updateBreakpoint(const Breakpoint &bp) override;
|
||||
void removeBreakpoint(const Breakpoint &bp) override;
|
||||
/* Needed for CMake support issue:25176 */
|
||||
|
||||
bool hasCapability(unsigned cap) const override;
|
||||
};
|
||||
|
||||
|
||||
@@ -378,8 +378,13 @@ void DapEngine::insertBreakpoint(const Breakpoint &bp)
|
||||
QTC_CHECK(bp->state() == BreakpointInsertionRequested);
|
||||
notifyBreakpointInsertProceeding(bp);
|
||||
|
||||
const BreakpointParameters ¶ms = bp->requestedParameters();
|
||||
dapInsertBreakpoint(bp);
|
||||
}
|
||||
|
||||
void DapEngine::dapInsertBreakpoint(const Breakpoint &bp)
|
||||
{
|
||||
bp->setResponseId(QString::number(m_nextBreakpointId++));
|
||||
const BreakpointParameters ¶ms = 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 ¶ms = 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);
|
||||
|
||||
@@ -113,6 +113,8 @@ protected:
|
||||
void dapScopes(int frameId);
|
||||
void threads();
|
||||
void dapVariables(int variablesReference);
|
||||
void dapRemoveBreakpoint(const Breakpoint &bp);
|
||||
void dapInsertBreakpoint(const Breakpoint &bp);
|
||||
|
||||
void handleDapDone();
|
||||
void readDapStandardOutput();
|
||||
|
||||
Reference in New Issue
Block a user