远程lldb调试器进入docker容器的问题

时间:2018-12-15 16:56:29

标签: c++ docker ubuntu clang lldb

设置是运行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 < / p>

在容器内进行调试

在容器中时,我可以使用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

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

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

我自己找到的。

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

一切正常,我可以按照所宣传的从主机运行lldb。

答案 1 :(得分:0)

您可以这样指定LLDB服务器使用的端口:

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 (不允许的操作)错误。

>