diff options
author | hjk <hjk@qt.io> | 2018-10-22 14:26:28 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2018-11-06 07:37:15 +0000 |
commit | 2556d4b44ba1e73a311075e2751c82f9f0feec12 (patch) | |
tree | 2759e6f1f6e208269a52d2000ab9b7ce0c90d256 /src | |
parent | 3e42841141cc06e0e88ddc014f26118179059edd (diff) | |
download | qt-creator-2556d4b44ba1e73a311075e2751c82f9f0feec12.tar.gz |
Debugger: Implement disabling/enabling subbreakpoints with LLDB
Change-Id: Iaad8716b98d632e5a933b7f5b26549c7cb885ea7
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/debugger/breakhandler.cpp | 2 | ||||
-rw-r--r-- | src/plugins/debugger/lldb/lldbengine.cpp | 24 | ||||
-rw-r--r-- | src/plugins/debugger/lldb/lldbengine.h | 1 |
3 files changed, 24 insertions, 3 deletions
diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index b37fcdfd4f..b1a3430333 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1417,8 +1417,6 @@ void BreakHandler::handleAlienBreakpoint(const QString &responseId, const Breakp SubBreakpoint BreakpointItem::findOrCreateSubBreakpoint(const QString &responseId) { - const QString minorPart = responseId.section('.', 1); - SubBreakpoint loc = findFirstLevelChild([&](const SubBreakpoint &l) { return l->responseId == responseId; }); diff --git a/src/plugins/debugger/lldb/lldbengine.cpp b/src/plugins/debugger/lldb/lldbengine.cpp index 1a5b2f2f08..c73c04b2ba 100644 --- a/src/plugins/debugger/lldb/lldbengine.cpp +++ b/src/plugins/debugger/lldb/lldbengine.cpp @@ -512,6 +512,26 @@ void LldbEngine::updateBreakpoint(const Breakpoint &bp) runCommand(cmd); } +void LldbEngine::enableSubBreakpoint(const SubBreakpoint &sbp, bool on) +{ + QTC_ASSERT(sbp, return); + Breakpoint bp = sbp->breakpoint(); + QTC_ASSERT(bp, return); + DebuggerCommand cmd("enableSubbreakpoint"); + cmd.arg("lldbid", bp->responseId()); + cmd.arg("locid", sbp->responseId); + cmd.arg("enabled", on); + cmd.callback = [bp, sbp](const DebuggerResponse &response) { + QTC_ASSERT(sbp, return); + QTC_ASSERT(bp, return); + if (response.resultClass == ResultDone) { + sbp->params.enabled = response.data["enabled"].toInt(); + bp->adjustMarker(); + } + }; + runCommand(cmd); +} + void LldbEngine::removeBreakpoint(const Breakpoint &bp) { QTC_ASSERT(bp, return); @@ -549,7 +569,7 @@ void LldbEngine::updateBreakpointData(const Breakpoint &bp, const GdbMi &bkpt, b const int numChild = locations.childCount(); if (numChild > 1) { for (const GdbMi &location : locations) { - const QString locid = QString("%1.%2").arg(rid).arg(location["locid"].data()); + const QString locid = location["locid"].data(); SubBreakpoint loc = bp->findOrCreateSubBreakpoint(locid); QTC_ASSERT(loc, continue); loc->params.type = bp->type(); @@ -557,6 +577,7 @@ void LldbEngine::updateBreakpointData(const Breakpoint &bp, const GdbMi &bkpt, b loc->params.functionName = location["function"].data(); loc->params.fileName = location["file"].data(); loc->params.lineNumber = location["line"].toInt(); + loc->displayName = QString("%1.%2").arg(bp->responseId()).arg(locid); } bp->setPending(false); } else if (numChild == 1) { @@ -1020,6 +1041,7 @@ bool LldbEngine::hasCapability(unsigned cap) const | ReloadModuleSymbolsCapability | BreakOnThrowAndCatchCapability | BreakConditionCapability + | BreakIndividualLocationsCapability | TracePointCapability | ReturnFromFunctionCapability | CreateFullBacktraceCapability diff --git a/src/plugins/debugger/lldb/lldbengine.h b/src/plugins/debugger/lldb/lldbengine.h index 7d0b01aeba..aff7150055 100644 --- a/src/plugins/debugger/lldb/lldbengine.h +++ b/src/plugins/debugger/lldb/lldbengine.h @@ -89,6 +89,7 @@ private: void insertBreakpoint(const Breakpoint &bp) override; void removeBreakpoint(const Breakpoint &bp) override; void updateBreakpoint(const Breakpoint &bp) override; + void enableSubBreakpoint(const SubBreakpoint &sbp, bool on) override; void assignValueInDebugger(WatchItem *item, const QString &expr, const QVariant &value) override; void executeDebuggerCommand(const QString &command) override; |