summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2018-10-22 14:26:28 +0200
committerhjk <hjk@qt.io>2018-11-06 07:37:15 +0000
commit2556d4b44ba1e73a311075e2751c82f9f0feec12 (patch)
tree2759e6f1f6e208269a52d2000ab9b7ce0c90d256 /src
parent3e42841141cc06e0e88ddc014f26118179059edd (diff)
downloadqt-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.cpp2
-rw-r--r--src/plugins/debugger/lldb/lldbengine.cpp24
-rw-r--r--src/plugins/debugger/lldb/lldbengine.h1
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;