Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ docker容器中的远程lldb调试器出现问题_C++_Docker_Ubuntu_Clang_Lldb - Fatal编程技术网

C++ docker容器中的远程lldb调试器出现问题

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

安装程序是一个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/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选项),否则附加调试器将失败,并出现操作不允许的错误