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
|
/*| 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
|
} // namespace Debugger::Internal
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ private:
|
|||||||
void handleDapStarted() override;
|
void handleDapStarted() override;
|
||||||
void setupEngine() 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;
|
bool hasCapability(unsigned cap) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -378,8 +378,13 @@ void DapEngine::insertBreakpoint(const Breakpoint &bp)
|
|||||||
QTC_CHECK(bp->state() == BreakpointInsertionRequested);
|
QTC_CHECK(bp->state() == BreakpointInsertionRequested);
|
||||||
notifyBreakpointInsertProceeding(bp);
|
notifyBreakpointInsertProceeding(bp);
|
||||||
|
|
||||||
const BreakpointParameters ¶ms = bp->requestedParameters();
|
dapInsertBreakpoint(bp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DapEngine::dapInsertBreakpoint(const Breakpoint &bp)
|
||||||
|
{
|
||||||
bp->setResponseId(QString::number(m_nextBreakpointId++));
|
bp->setResponseId(QString::number(m_nextBreakpointId++));
|
||||||
|
const BreakpointParameters ¶ms = bp->requestedParameters();
|
||||||
|
|
||||||
QJsonArray breakpoints;
|
QJsonArray breakpoints;
|
||||||
for (const auto &breakpoint : breakHandler()->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();
|
qCDebug(dapEngineLog) << "insertBreakpoint" << bp->modelId() << bp->responseId();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DapEngine::updateBreakpoint(const Breakpoint &bp)
|
void DapEngine::updateBreakpoint(const Breakpoint &bp)
|
||||||
{
|
{
|
||||||
|
BreakpointParameters parameters = bp->requestedParameters();
|
||||||
notifyBreakpointChangeProceeding(bp);
|
notifyBreakpointChangeProceeding(bp);
|
||||||
// QTC_ASSERT(bp, return);
|
qDebug() << "updateBreakpoint";
|
||||||
// const BreakpointState state = bp->state();
|
|
||||||
// if (QTC_GUARD(state == BreakpointUpdateRequested))
|
|
||||||
// if (bp->responseId().isEmpty()) // FIXME postpone update somehow (QTimer::singleShot?)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// // FIXME figure out what needs to be changed (there might be more than enabled state)
|
if (parameters.enabled != bp->isEnabled()) {
|
||||||
// const BreakpointParameters &requested = bp->requestedParameters();
|
if (bp->isEnabled())
|
||||||
// if (requested.enabled != bp->isEnabled()) {
|
dapRemoveBreakpoint(bp);
|
||||||
// if (bp->isEnabled())
|
else
|
||||||
// postDirectCommand("disable " + bp->responseId());
|
dapInsertBreakpoint(bp);
|
||||||
// else
|
}
|
||||||
// postDirectCommand("enable " + bp->responseId());
|
|
||||||
// bp->setEnabled(!bp->isEnabled());
|
|
||||||
// }
|
|
||||||
// // Pretend it succeeds without waiting for response.
|
|
||||||
notifyBreakpointChangeOk(bp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DapEngine::removeBreakpoint(const Breakpoint &bp)
|
void DapEngine::removeBreakpoint(const Breakpoint &bp)
|
||||||
@@ -433,6 +429,11 @@ void DapEngine::removeBreakpoint(const Breakpoint &bp)
|
|||||||
QTC_CHECK(bp->state() == BreakpointRemoveRequested);
|
QTC_CHECK(bp->state() == BreakpointRemoveRequested);
|
||||||
notifyBreakpointRemoveProceeding(bp);
|
notifyBreakpointRemoveProceeding(bp);
|
||||||
|
|
||||||
|
dapRemoveBreakpoint(bp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DapEngine::dapRemoveBreakpoint(const Breakpoint &bp)
|
||||||
|
{
|
||||||
const BreakpointParameters ¶ms = bp->requestedParameters();
|
const BreakpointParameters ¶ms = bp->requestedParameters();
|
||||||
|
|
||||||
QJsonArray breakpoints;
|
QJsonArray breakpoints;
|
||||||
@@ -455,7 +456,6 @@ void DapEngine::removeBreakpoint(const Breakpoint &bp)
|
|||||||
});
|
});
|
||||||
|
|
||||||
qCDebug(dapEngineLog) << "removeBreakpoint" << bp->modelId() << bp->responseId();
|
qCDebug(dapEngineLog) << "removeBreakpoint" << bp->modelId() << bp->responseId();
|
||||||
notifyBreakpointRemoveOk(bp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DapEngine::loadSymbols(const Utils::FilePath &/*moduleName*/)
|
void DapEngine::loadSymbols(const Utils::FilePath &/*moduleName*/)
|
||||||
@@ -870,6 +870,16 @@ void DapEngine::handleBreakpointEvent(const QJsonObject &event)
|
|||||||
QString::number(breakpoint.value("id").toInt()));
|
QString::number(breakpoint.value("id").toInt()));
|
||||||
qCDebug(dapEngineLog) << "breakpoint id :" << 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 (body.value("reason").toString() == "new") {
|
||||||
if (breakpoint.value("verified").toBool()) {
|
if (breakpoint.value("verified").toBool()) {
|
||||||
notifyBreakpointInsertOk(bp);
|
notifyBreakpointInsertOk(bp);
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ protected:
|
|||||||
void dapScopes(int frameId);
|
void dapScopes(int frameId);
|
||||||
void threads();
|
void threads();
|
||||||
void dapVariables(int variablesReference);
|
void dapVariables(int variablesReference);
|
||||||
|
void dapRemoveBreakpoint(const Breakpoint &bp);
|
||||||
|
void dapInsertBreakpoint(const Breakpoint &bp);
|
||||||
|
|
||||||
void handleDapDone();
|
void handleDapDone();
|
||||||
void readDapStandardOutput();
|
void readDapStandardOutput();
|
||||||
|
|||||||
Reference in New Issue
Block a user