远程调试Docker容器中的LLDB出现问题

4

安装过程是在运行 Ubuntu 16.04、Clang/LLDB 6.0 的 Docker 容器中完成的。目前,我希望能够通过另一个终端而不是IDE远程调试应用程序。

Docker文件如下:

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" ]

我按照以下方式旋转我的容器

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-server

lldb-server-6.0 platform --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

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

我做错了什么?

2个回答

4

我自己找到了。

LLDB-server监听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

一切运行良好,我可以像广告中宣传的那样从主机上运行lldb。


2

您可以通过以下方式指定 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选项),否则附加调试器将会失败并显示操作不允许错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接