设置是运行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)进程启动 错误:连接远程失败(连接端口失败) 错误:进程启动失败:无法连接端口
我在做什么错了?
答案 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 (不允许的操作)错误。
>