【发布时间】:2019-05-21 03:46:49
【问题描述】:
我正在尝试在 Docker 容器中编译一个“hello world”Rust 程序,然后使用 GDBServer 和 CLion 远程调试它,但我认为 gdbserver 没有正确启动。当我启动它时,我没有收到预期的“进程已启动”和“正在侦听端口...”消息;我什么也得不到。
我已在家庭网络上使用 Raspberry Pi 成功完成此操作,但在使用 Docker 时无法正常工作。
我的最终目标是在 Digital Ocean 液滴上部署这个 Docker 容器,并从我的本地机器远程调试。目前,我已经在本地机器上运行了 Docker。
我正在使用 Mac (Mojave),运行 Docker (v18.09),并启动一个 Docker 容器 an image built from Debian with Rust and gdbserver installed。 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
我使用docker run --rm -it -v $(pwd):/source -p 7777:7777 schickling/rust 启动容器,默认情况下启动bash。
进入容器后,我使用rustc -g -o ./program ./src/main.rs 编译Rust 程序,它输出一个文件:program。我可以正常运行程序(它只输出Hello World)。
当我在 Docker 中运行 gdbserver localhost:7777 ./program 时,终端只是挂起。我让它静置了20分钟。我无法从 CLion 连接到它,甚至 ping 在我的 Mac 上也无法使用。我尝试添加输出my_waitpid (11, 0x0) 然后挂起的--debug 标志。我也试过:7777、127.0.0.1:7777 和host:7777。我尝试了几个不同的端口。
我不确定我的问题出在哪里。可能是 GDBServer 正在运行,问题出在我的 CLion 设置中,但我对此表示怀疑。我有路径映射设置,target remote args 是tcp:127.0.0.1:7777。我刚收到Connection closed。 Symbol File 和 Sys Root 是空的,但过去在我的 Raspberry Pi 上是有效的。
【问题讨论】:
-
如果我在容器内运行 gdb,我可以使用我的 IDE outside 容器来单步执行吗?我一直在寻找“现有解决方案”,并提出了几篇文章,但都没有奏效。
标签: docker debugging rust clion gdbserver