aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/debugger
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2019-03-01 14:58:57 +0100
committerChristian Stenger <christian.stenger@qt.io>2019-03-06 05:43:12 +0000
commit31e549a7dce3b7f3c6dedc0f014162784e6cff08 (patch)
tree30ff0a2e80cd6b0e32dc3f8867bc0b2ead3dbbd3 /share/qtcreator/debugger
parent4a3d6f46949befe1ac7f67e71e0b67789c041483 (diff)
Debugger: Improve lldb breakpoint handling
Inform QC about changed breakpoints on the LLDB side. Fixes: QTCREATORBUG-21997 Change-Id: Icec25725f92d8a0b47f7dab2971c0c5eb5b23757 Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'share/qtcreator/debugger')
-rw-r--r--share/qtcreator/debugger/lldbbridge.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index a961569cd0..cf19c1eac8 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -957,6 +957,12 @@ class Dumper(DumperBase):
return
self.report('pid="%s"' % self.process.GetProcessID())
self.reportState('enginerunandinferiorrunok')
+ if self.target is not None:
+ broadcaster = self.target.GetBroadcaster()
+ listener = self.debugger.GetListener()
+ broadcaster.AddListener(listener, lldb.SBTarget.eBroadcastBitBreakpointChanged)
+ listener.StartListeningForEvents(broadcaster, lldb.SBTarget.eBroadcastBitBreakpointChanged)
+
def loop(self):
event = lldb.SBEvent()
@@ -1116,6 +1122,11 @@ class Dumper(DumperBase):
# logview pane feature.
self.report('token(\"%s\")' % args["token"])
+
+ def reportBreakpointUpdate(self, bp):
+ self.report('breakpointmodified={%s}' % self.describeBreakpoint(bp))
+
+
def readRawMemory(self, address, size):
if size == 0:
return bytes()
@@ -1288,7 +1299,20 @@ class Dumper(DumperBase):
self.process.Kill()
self.reportResult('', args)
+
+ def handleBreakpointEvent(self, event):
+ eventType = lldb.SBBreakpoint.GetBreakpointEventTypeFromEvent(event)
+ # handle only the resolved locations for now..
+ if eventType & lldb.eBreakpointEventTypeLocationsResolved:
+ bp = lldb.SBBreakpoint.GetBreakpointFromEvent(event)
+ if bp is not None:
+ self.reportBreakpointUpdate(bp)
+
+
def handleEvent(self, event):
+ if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
+ self.handleBreakpointEvent(event)
+ return
out = lldb.SBStream()
event.GetDescription(out)
#warn("EVENT: %s" % event)