【问题标题】:LLDB remote debug for server side Swift is failed between Linux in docker and macOS服务器端 Swift 的 LLDB 远程调试在 Docker 和 macOS 中的 Linux 之间失败
【发布时间】:2018-08-17 04:46:45
【问题描述】:

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

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

root@031ab2443e1a:/var/vapor# lldb-server version
lldb version 5.0.0 (git@github.com:apple/swift-lldb.git revision 76dfa56ed35eaa392f7e51088c08f08f1150d142)
  Swift-4.1 (revision f01501c324876fc07820dc28923d7088fb7af847)
  clang revision cd84be6c4294f9ec302c20c63a601cbaeaa6a017
  llvm revision cf364153438b3ac07a4a7d721159936e439ba2e7

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

[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

我可以连接它们。

在服务器中。

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

在 Mac 中。

[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

但是,附加失败。

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

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

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

【问题讨论】:

    标签: swift macos docker lldb


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      为了详细说明omochimetaru的答案,您可以指定LLDB-server使用的端口:

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

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

      EXPOSE 31166
      EXPOSE 31200-31300
      

      当你运行容器时:

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

      请注意,您需要以特权身份运行 docker(--privileged 选项),否则附加调试器将失败并出现 Operation not Permitted 错误。

      【讨论】:

      • 你有一个包含远程调试设置工作示例项目的仓库吗?
      • 恐怕不会,而且我不再在那个项目上积极维护这个了。仅供参考,当我让 LLDB 像这样工作时,我无法使用 Xcode 进行调试,因为 IIRC 连接一直失败。
      猜你喜欢
      • 2018-01-13
      • 2018-10-19
      • 2019-05-16
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多