LLDB remote debug for server side Swift is failed between Linux in docker and macOS
我正在尝试从macOS远程调试服务器端swift。
我正在使用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使用其他端口进行调试。它可以由