aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/debugger/lldb/lldbengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/debugger/lldb/lldbengine.cpp')
-rw-r--r--src/plugins/debugger/lldb/lldbengine.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp
index f0c76422575..9b4f6056f3e 100644
--- a/src/plugins/debugger/lldb/lldbengine.cpp
+++ b/src/plugins/debugger/lldb/lldbengine.cpp
@@ -395,6 +395,8 @@ void LldbEngine::handleResponse(const QString &response)
handleOutputNotification(item);
else if (name == "pid")
notifyInferiorPid(item.toProcessHandle());
+ else if (name == "breakpointmodified")
+ handleInterpreterBreakpointModified(item);
}
}
@@ -607,6 +609,31 @@ void LldbEngine::handleOutputNotification(const GdbMi &output)
showMessage(data, ch);
}
+void LldbEngine::handleInterpreterBreakpointModified(const GdbMi &bpItem)
+{
+ QTC_ASSERT(bpItem.childCount(), return);
+ QString id = bpItem.childAt(0).m_data;
+
+ Breakpoint bp = breakHandler()->findBreakpointByResponseId(id);
+ if (!bp) // FIXME adapt whole bp handling and turn into soft assert
+ return;
+
+ // this function got triggered by a lldb internal breakpoint event
+ // avoid asserts regarding unexpected state transitions
+ switch (bp->state()) {
+ case BreakpointInsertionRequested: // was a pending bp
+ bp->gotoState(BreakpointInsertionProceeding, BreakpointInsertionRequested);
+ break;
+ case BreakpointInserted: // was an inserted, gets updated now
+ bp->gotoState(BreakpointUpdateRequested, BreakpointInserted);
+ notifyBreakpointChangeProceeding(bp);
+ break;
+ default:
+ break;
+ }
+ updateBreakpointData(bp, bpItem, false);
+}
+
void LldbEngine::loadSymbols(const QString &moduleName)
{
Q_UNUSED(moduleName)