diff options
author | Christian Stenger <christian.stenger@qt.io> | 2019-03-01 14:58:57 +0100 |
---|---|---|
committer | Christian Stenger <christian.stenger@qt.io> | 2019-03-06 05:43:12 +0000 |
commit | 31e549a7dce3b7f3c6dedc0f014162784e6cff08 (patch) | |
tree | 30ff0a2e80cd6b0e32dc3f8867bc0b2ead3dbbd3 /share/qtcreator/debugger | |
parent | 4a3d6f46949befe1ac7f67e71e0b67789c041483 (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.py | 24 |
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) |