服务器端Swift的LLDB远程调试在Docker中的Linux和macOS之间失败

LLDB remote debug for server side Swift is failed between Linux in docker and macOS

我正在尝试从macOS远程调试服务器端swift。

lldb-server在macOS上的Docker的Ubuntu 16.04上运行。
我正在使用swift-4.1-RELEASE二进制文件。

1
2
3
4
5
root@031ab2443e1a:/var/vapor# lldb-server version
lldb version 5.0.0 ([email protected]:apple/swift-lldb.git revision 76dfa56ed35eaa392f7e51088c08f08f1150d142)
  Swift-4.1 (revision f01501c324876fc07820dc28923d7088fb7af847)
  clang revision cd84be6c4294f9ec302c20c63a601cbaeaa6a017
  llvm revision cf364153438b3ac07a4a7d721159936e439ba2e7

我也在macOS上使用swift-4.1-RELEASE快照。

1
2
3
4
5
6
[omochi@omochi-iMac-PC43 ~]$ export TOOLCHAINS=org.swift.4120180329a
[omochi@omochi-iMac-PC43 ~]$ lldb -version
lldb-360.0.0 (buildbot 2018-03-29)
  Swift-4.1 (revision f01501c324876fc07820dc28923d7088fb7af847)
  clang revision cd84be6c4294f9ec302c20c63a601cbaeaa6a017
  llvm revision cf364153438b3ac07a4a7d721159936e439ba2e7

我可以连接它们。

在服务器中。

1
2
root@031ab2443e1a:/var/vapor# lldb-server platform --listen"*:31166"  --server
Connection established.

在Mac中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[omochi@omochi-iMac-PC43 ~]$ lldb
(lldb) platform select remote-linux
  Platform: remote-linux
 Connected: no
(lldb) platform connect connect://127.0.0.1:31166
  Platform: remote-linux
    Triple: x86_64-*-linux-gnu
OS Version: 4.9.93 (4.9.93-linuxkit-aufs)
    Kernel: #1 SMP Wed Jun 6 16:55:56 UTC 2018
  Hostname: 031ab2443e1a
 Connected: yes
WorkingDir: /var/vapor
(lldb) platform process list
6 matching processes were found on"remote-linux"
PID    PARENT USER       TRIPLE                   NAME
====== ====== ========== ======================== ============================
1      0      (null)     x86_64-*-linux           dash
291    1                 x86_64-*-linux           vapor
423    0                 x86_64-*-linux           bash
572    291               x86_64-*-linux           Run
587    0                 x86_64-*-linux           bash
676    423               x86_64-*-linux           lldb-server

但是,附加失败。

1
2
(lldb) attach 572
error: attach failed: Failed to connect port

我在ubuntu中测试了lldb来连接lldb-server本身。
然后附加成功。
因此,我认为lldb-server可以正确运行以附加进程。

为什么从macOS附加失败?
如何解决这个问题。


仅需详细说明omochimetaru答案,就可以指定LLDB服务器使用的端口,如下所示:

1
lldb-server platform --listen"*:31166" --server --min-gdbserver-port 31200 --max-gdbserver-port 31300

当然,您需要在Dockerfile中公开这些端口:

1
2
EXPOSE 31166
EXPOSE 31200-31300

以及运行容器时:

1
docker run --privileged --name vapor-server -p 8080:8080 -p 31166:31166 -p 31200-31300:31200-31300 vapor-image

请注意,您需要以特权用户权限(--privileged选项)运行docker,否则连接调试器将失败,并显示"操作不允许"错误。


我找到了答案。 lldb-server和lldb使用其他端口进行调试。它可以由lldb-server--min-gdbserver-port--max-gdbserver-port选项指定。我公开了我通过docker函数指定的这些端口。我终于成功连接。