forked from qt-creator/qt-creator
Debugger: Make LLDB work a bit with remote Linux
The device on remote side *has* to configure (/usr/bin/)lldb-server as "GDB server executable" in the device settings. A real gdbserver does not work. Change-Id: I045ffb60a824e06ee683d8bdfffeb480a580af5f Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -879,7 +879,35 @@ class Dumper(DumperBase):
|
||||
self.debugger.SetCurrentPlatformSDKRoot(self.sysRoot_)
|
||||
|
||||
exefile = None if self.attachPid_ > 0 else self.executable_
|
||||
self.target = self.debugger.CreateTarget(exefile, None, None, True, error)
|
||||
|
||||
self.target = self.debugger.CreateTarget(
|
||||
exefile, None, self.platform_, True, error)
|
||||
|
||||
if not error.Success():
|
||||
self.report(self.describeError(error))
|
||||
self.reportState('enginerunfailed')
|
||||
return
|
||||
|
||||
if (self.startMode_ == DebuggerStartMode.AttachToRemoteServer
|
||||
or self.startMode_ == DebuggerStartMode.AttachToRemoteProcess):
|
||||
|
||||
|
||||
remote_channel = 'connect://' + self.remoteChannel_
|
||||
connect_options = lldb.SBPlatformConnectOptions(remote_channel)
|
||||
|
||||
res = self.target.GetPlatform().ConnectRemote(connect_options)
|
||||
DumperBase.warn("CONNECT: %s %s %s" % (res,
|
||||
self.target.GetPlatform().GetName(),
|
||||
self.target.GetPlatform().IsConnected()))
|
||||
|
||||
|
||||
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)
|
||||
|
||||
if self.nativeMixed:
|
||||
self.interpreterEventBreakpoint = \
|
||||
@@ -918,17 +946,29 @@ class Dumper(DumperBase):
|
||||
self.reportState('enginerunandinferiorrunok')
|
||||
elif (self.startMode_ == DebuggerStartMode.AttachToRemoteServer
|
||||
or self.startMode_ == DebuggerStartMode.AttachToRemoteProcess):
|
||||
self.process = self.target.ConnectRemote(
|
||||
self.debugger.GetListener(),
|
||||
self.remoteChannel_, None, error)
|
||||
|
||||
f = lldb.SBFileSpec()
|
||||
f.SetFilename(self.executable_)
|
||||
|
||||
launchInfo = lldb.SBLaunchInfo(self.processArgs_)
|
||||
#launchInfo.SetWorkingDirectory(self.workingDirectory_)
|
||||
launchInfo.SetWorkingDirectory('/tmp')
|
||||
launchInfo.SetExecutableFile(f, True)
|
||||
|
||||
DumperBase.warn("TARGET: %s" % self.target)
|
||||
self.process = self.target.Launch(launchInfo, error)
|
||||
DumperBase.warn("PROCESS: %s" % self.process)
|
||||
|
||||
if not error.Success():
|
||||
self.report(self.describeError(error))
|
||||
self.reportState('enginerunfailed')
|
||||
return
|
||||
|
||||
# Even if it stops it seems that LLDB assumes it is running
|
||||
# and later detects that it did stop after all, so it is be
|
||||
# better to mirror that and wait for the spontaneous stop.
|
||||
self.reportState('enginerunandinferiorrunok')
|
||||
|
||||
elif self.startMode_ == DebuggerStartMode.AttachCore:
|
||||
coreFile = args.get('coreFile', '')
|
||||
self.process = self.target.LoadCore(coreFile)
|
||||
@@ -949,14 +989,6 @@ 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.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()
|
||||
|
Reference in New Issue
Block a user