forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -83,6 +83,7 @@ class Dumper(DumperBase):
|
|||||||
# 'communication', 'unwind', 'commands'])
|
# 'communication', 'unwind', 'commands'])
|
||||||
#self.debugger.EnableLog('lldb', ['all'])
|
#self.debugger.EnableLog('lldb', ['all'])
|
||||||
self.debugger.Initialize()
|
self.debugger.Initialize()
|
||||||
|
self.debugger.SetAsync(True)
|
||||||
self.debugger.HandleCommand('settings set auto-confirm on')
|
self.debugger.HandleCommand('settings set auto-confirm on')
|
||||||
|
|
||||||
# FIXME: warn('DISABLING DEFAULT FORMATTERS')
|
# FIXME: warn('DISABLING DEFAULT FORMATTERS')
|
||||||
@@ -863,10 +864,7 @@ class Dumper(DumperBase):
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
if self.useTerminal_:
|
if self.useTerminal_:
|
||||||
self.ignoreStops = 2
|
self.ignoreStops = 1
|
||||||
else:
|
|
||||||
if self.useTerminal_:
|
|
||||||
self.ignoreStops = 1
|
|
||||||
|
|
||||||
if self.platform_:
|
if self.platform_:
|
||||||
self.debugger.SetCurrentPlatform(self.platform_)
|
self.debugger.SetCurrentPlatform(self.platform_)
|
||||||
@@ -895,7 +893,6 @@ class Dumper(DumperBase):
|
|||||||
|
|
||||||
def prepare(self, args):
|
def prepare(self, args):
|
||||||
error = lldb.SBError()
|
error = lldb.SBError()
|
||||||
listener = self.debugger.GetListener()
|
|
||||||
|
|
||||||
if self.attachPid_ > 0:
|
if self.attachPid_ > 0:
|
||||||
attachInfo = lldb.SBAttachInfo(self.attachPid_)
|
attachInfo = lldb.SBAttachInfo(self.attachPid_)
|
||||||
@@ -948,18 +945,23 @@ class Dumper(DumperBase):
|
|||||||
if self.target is not None:
|
if self.target is not None:
|
||||||
broadcaster = self.target.GetBroadcaster()
|
broadcaster = self.target.GetBroadcaster()
|
||||||
listener = self.debugger.GetListener()
|
listener = self.debugger.GetListener()
|
||||||
|
broadcaster.AddListener(listener, lldb.SBProcess.eBroadcastBitStateChanged)
|
||||||
|
listener.StartListeningForEvents(broadcaster, lldb.SBProcess.eBroadcastBitStateChanged)
|
||||||
broadcaster.AddListener(listener, lldb.SBTarget.eBroadcastBitBreakpointChanged)
|
broadcaster.AddListener(listener, lldb.SBTarget.eBroadcastBitBreakpointChanged)
|
||||||
listener.StartListeningForEvents(broadcaster, lldb.SBTarget.eBroadcastBitBreakpointChanged)
|
listener.StartListeningForEvents(broadcaster, lldb.SBTarget.eBroadcastBitBreakpointChanged)
|
||||||
|
|
||||||
|
|
||||||
def loop(self):
|
def loop(self):
|
||||||
event = lldb.SBEvent()
|
event = lldb.SBEvent()
|
||||||
|
broadcaster = self.target.GetBroadcaster()
|
||||||
listener = self.debugger.GetListener()
|
listener = self.debugger.GetListener()
|
||||||
while True:
|
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)
|
self.handleEvent(event)
|
||||||
else:
|
if listener.WaitForEventForBroadcaster(0, broadcaster, event):
|
||||||
warn('TIMEOUT')
|
self.handleEvent(event)
|
||||||
|
|
||||||
|
|
||||||
def describeError(self, error):
|
def describeError(self, error):
|
||||||
desc = lldb.SBStream()
|
desc = lldb.SBStream()
|
||||||
@@ -1301,6 +1303,10 @@ class Dumper(DumperBase):
|
|||||||
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
|
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
|
||||||
self.handleBreakpointEvent(event)
|
self.handleBreakpointEvent(event)
|
||||||
return
|
return
|
||||||
|
if not lldb.SBProcess.EventIsProcessEvent(event):
|
||||||
|
warn("UNEXPECTED event (%s)" % event.GetType())
|
||||||
|
return
|
||||||
|
|
||||||
out = lldb.SBStream()
|
out = lldb.SBStream()
|
||||||
event.GetDescription(out)
|
event.GetDescription(out)
|
||||||
#warn("EVENT: %s" % event)
|
#warn("EVENT: %s" % event)
|
||||||
|
Reference in New Issue
Block a user