远程 lldb 调试器进入 docker 容器时出现问题

5 c++ ubuntu clang lldb docker

安装程序是一个运行 ubuntu 16.04、clang/lldb 6.0 的 docker 容器。我希望能够远程调试应用程序,目前是通过另一个终端而不是 IDE。

我的泊坞窗文件

FROM ubuntu:16.04
RUN apt update
RUN apt install -y curl git nano cmake build-essential xz-utils
RUN apt install -y clang-6.0 lldb-6.0
EXPOSE 2000
CMD [ "/bin/bash" ]
Run Code Online (Sandbox Code Playgroud)

我按如下方式旋转容器

docker run --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it -v ~/Developer:/Developer -p 2000:2000 --name cpp-dev ubuntu-clang-dev

从容器内部进行调试

在容器内时,我可以使用 clang++ 和 lldb 成功编译和调试我的程序。

我如何启动我的 lldb 服务器

lldb-server-6.0 平台 --server --listen *:2000

现在,我从一个单独的终端执行以下操作:

> lldb
> platform select remote-linux
> platform connect connect://localhost:2000
> target create test
> b main     (which returns breakpoint main at main.cpp:5)
> process launch
Run Code Online (Sandbox Code Playgroud)

错误: (lldb)进程启动错误:连接远程失败(无法连接端口)错误:进程启动失败:无法连接端口

我究竟做错了什么?

小智 5

我自己找到的。

LLDB 服务器在端口 2000 上侦听传入连接。收到这样的请求后,它会生成一个单独的“lldb g:”。这个秘密端口不从我的虚拟机向外界开放。

对我来说最简单的技巧是让容器与主机在同一网络上运行。因此,一旦我启动容器:

docker run --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it -v ~/Developer:/Developer **--network host** --name cpp-dev ubuntu-clang-dev
Run Code Online (Sandbox Code Playgroud)

一切正常,我可以按照广告的那样从主机运行 lldb。