C++ docker容器中的远程lldb调试器出现问题
安装程序是一个docker容器,运行ubuntu 16.04、clang/lldb 6.0。我希望能够通过另一个终端而不是IDE远程调试应用程序 我的docker文件C++ docker容器中的远程lldb调试器出现问题,c++,docker,ubuntu,clang,lldb,C++,Docker,Ubuntu,Clang,Lldb,安装程序是一个docker容器,运行ubuntu 16.04、clang/lldb 6.0。我希望能够通过另一个终端而不是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/ba
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-p2000:2000--name cpp dev ubuntu clang dev
从容器内部进行调试工作
在容器中,我可以使用clang++和lldb成功编译和调试我的程序
如何启动lldb服务器
lldb-server-6.0平台--服务器--侦听*: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)进程启动
错误:连接远程失败(连接端口失败)
错误:进程启动失败:连接端口失败
我做错了什么?我自己发现的
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。您可以指定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选项),否则附加调试器将失败,并出现操作不允许的错误