aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-04-02 11:19:28 +0200
committerhjk <hjk@qt.io>2020-04-02 15:50:19 +0000
commit7f958700a09f09ac124b20d23236ede472b58d87 (patch)
tree4ced1e5264d60a90676a70de9550a147f07610fc
parentfb784a1f805946cb422034b3882b862b5ad33f45 (diff)
Debugger: Make LLDB work a bit with remote Linuxv4.12.0-rc1
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>
-rw-r--r--share/qtcreator/debugger/lldbbridge.py56
1 files changed, 44 insertions, 12 deletions
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index b980605451..2995256b1a 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -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()