Apo*_*llo 6 debugging gdbserver rust docker clion
我试图在 Docker 容器内编译一个“hello world”Rust 程序,然后使用 GDBServer 和 CLion 远程调试它,但我认为gdbserver启动不正确。当我启动它时,我没有收到我期望的“进程已启动”和“正在侦听端口...”消息;我什么也没得到。
我已经在家庭网络上使用 Raspberry Pi 成功完成了此操作,但在使用 Docker 时无法使其工作。
我的最终目标是在 Digital Ocean Droplet 上部署此 Docker 容器,并从本地计算机进行远程调试。目前,我已在本地计算机上运行 Docker。
我正在 Mac (Mojave) 上工作,运行 Docker (v18.09),并启动一个 Docker 容器,该容器是使用 Rust 构建的 Debian 镜像并gdbserver安装了. GDBServer 和 Rust 通过以下方式安装:
# install curl (needed to install rust)
apt-get update && apt-get install -y curl gdb g++-multilib lib32stdc++6 libssl-dev libncurses5-dev
# install rust + cargo nightly
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly
Run Code Online (Sandbox Code Playgroud)
我启动默认docker run --rm -it -v $(pwd):/source -p 7777:7777 schickling/rust启动的容器。bash
进入容器后,我使用rustc -g -o ./program ./src/main.rs它编译 Rust 程序,输出单个文件:program. 我可以很好地运行该程序(它只输出Hello World)。
当我gdbserver localhost:7777 ./program在 Docker 中运行时,终端就挂起。我让它静置了 20 分钟。我无法从 CLion 连接到它,甚至ping无法在我的 Mac 上工作。我尝试添加--debug输出my_waitpid (11, 0x0)然后挂起的标志。我也尝试过:7777、127.0.0.1:7777、 和host:7777。我尝试了几个不同的端口。
我不确定我的问题出在哪里。可能 GDBServer正在运行,问题出在我的 CLion 设置中,但我对此表示怀疑。我有路径映射设置并且target remote args是tcp:127.0.0.1:7777. 我刚刚得到Connection closed。符号文件和系统根目录是空的,但这在过去适用于我的 Raspberry Pi。
我弄清楚了如何运行我的 Docker 容器,以便--privileged正确gdbserver运行。我还更新了一些 CLion 配置并使其正常工作。
有用的链接:
我更新的 docker 命令docker run --rm -it -v $(pwd):/source -p 7777:7777 -e container=docker --privileged schickling/rust
我的运行配置:
奇迹般有效。