summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2019-09-25 13:15:26 +0200
committerChristian Stenger <christian.stenger@qt.io>2019-09-25 13:17:53 +0000
commit9a5826d19cab36caabd6c5ad72f5cf1bcdc06ece (patch)
treefaa2a8cfd9d36e6671621f9b503de814799aa009
parentca1cee0956a4b987e764982c4b82f9f722915872 (diff)
downloadqt-creator-9a5826d19cab36caabd6c5ad72f5cf1bcdc06ece.tar.gz
Debugger: Fix debugging with LLDB 1100.x
Tweak handling for LLDB provided by Xcode 11 slightly, as the state handling of the process went astray when using the debugger Python 3 based. Task-number: QTCREATORBUG-22955 Change-Id: Ie070049d210a570993507ed940d141237aab89ce Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--share/qtcreator/debugger/lldbbridge.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 27d33e3046..0150a38c8e 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -83,6 +83,7 @@ class Dumper(DumperBase):
# 'communication', 'unwind', 'commands'])
#self.debugger.EnableLog('lldb', ['all'])
self.debugger.Initialize()
+ self.debugger.SetAsync(True)
self.debugger.HandleCommand('settings set auto-confirm on')
# FIXME: warn('DISABLING DEFAULT FORMATTERS')
@@ -863,10 +864,7 @@ class Dumper(DumperBase):
pass
else:
if self.useTerminal_:
- self.ignoreStops = 2
- else:
- if self.useTerminal_:
- self.ignoreStops = 1
+ self.ignoreStops = 1
if self.platform_:
self.debugger.SetCurrentPlatform(self.platform_)
@@ -895,7 +893,6 @@ class Dumper(DumperBase):
def prepare(self, args):
error = lldb.SBError()
- listener = self.debugger.GetListener()
if self.attachPid_ > 0:
attachInfo = lldb.SBAttachInfo(self.attachPid_)
@@ -948,18 +945,23 @@ class Dumper(DumperBase):
if self.target is not None:
broadcaster = self.target.GetBroadcaster()
listener = self.debugger.GetListener()
+ broadcaster.AddListener(listener, lldb.SBProcess.eBroadcastBitStateChanged)
+ listener.StartListeningForEvents(broadcaster, lldb.SBProcess.eBroadcastBitStateChanged)
broadcaster.AddListener(listener, lldb.SBTarget.eBroadcastBitBreakpointChanged)
listener.StartListeningForEvents(broadcaster, lldb.SBTarget.eBroadcastBitBreakpointChanged)
def loop(self):
event = lldb.SBEvent()
+ broadcaster = self.target.GetBroadcaster()
listener = self.debugger.GetListener()
while True:
- if listener.WaitForEvent(10000000, event):
+ sys.stdout.flush() # IMPORTANT! to receive process state changes with lldb 1100
+ while listener.GetNextEvent(event):
self.handleEvent(event)
- else:
- warn('TIMEOUT')
+ if listener.WaitForEventForBroadcaster(0, broadcaster, event):
+ self.handleEvent(event)
+
def describeError(self, error):
desc = lldb.SBStream()
@@ -1301,6 +1303,10 @@ class Dumper(DumperBase):
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
self.handleBreakpointEvent(event)
return
+ if not lldb.SBProcess.EventIsProcessEvent(event):
+ warn("UNEXPECTED event (%s)" % event.GetType())
+ return
+
out = lldb.SBStream()
event.GetDescription(out)
#warn("EVENT: %s" % event)