当 运行 在 Docker 内时,GDBServer 未启动或侦听端口

GDBServer not starting or listening on port when run inside of Docker

我正在尝试在 Docker 容器中编译一个 "hello world" Rust 程序,然后使用 GDBServer 和 CLion 远程调试它,但我认为 gdbserver 没有正确启动.当我启动它时,我没有收到我期望的 "process started" 和 "listening on port..." 消息;我一无所获。

我已经在我的家庭网络上使用 Raspberry Pi 成功完成了此操作,但在使用 Docker 时无法正常工作。

我的最终目标是将这个 Docker 容器部署在 Digital Ocean droplet 上,并从我的本地机器远程调试。现在,我在本地机器上安装了 Docker 运行ning。

我正在开发 Mac (Mojave),运行ning 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 工作。我试过添加 --debug 标志,它输出 my_waitpid (11, 0x0) 然后挂起。我还尝试了 :7777127.0.0.1:7777host:7777。我尝试了几个不同的端口。

我不确定我的问题出在哪里。可能是 GDBServer is 运行ning 问题出在我的 CLion 设置中,但我对此表示怀疑。我有路径映射设置,target remote argstcp:127.0.0.1:7777。我刚得到 Connection closed。 Symbol File 和 Sys Root 是空的,但这在过去对我的 Raspberry Pi.

有效

我想出了如何 运行 我的 Docker 容器作为 --privileged 允许 gdbserver 正确地 运行。我还更新了一些 CLion 配置并使其正常工作。

有用的链接:

我更新的 docker 命令 docker run --rm -it -v $(pwd):/source -p 7777:7777 -e container=docker --privileged schickling/rust

还有我的运行配置:

  • GDB:捆绑
  • 'target remote' 参数:tcp:localhost:7777
  • Symbolfile:我编译的二进制文件的本地副本(从 Docker 复制,多亏了卷)
  • 系统根:(空白)
  • Pathmappings:我在Docker中的项目目录的绝对路径,以及我本地机器上相同项目目录(同一卷)的绝对路径

很有魅力。