【问题标题】:GDBServer not starting or listening on port when run inside of Docker在 Docker 内部运行时,GDBServer 未启动或侦听端口
【发布时间】: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 标志。我也试过:7777127.0.0.1:7777host:7777。我尝试了几个不同的端口。

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

【问题讨论】:

  • 如果我在容器内运行 gdb,我可以使用我的 IDE outside 容器来单步执行吗?我一直在寻找“现有解决方案”,并提出了几篇文章,但都没有奏效。

标签: docker debugging rust clion gdbserver


【解决方案1】:

我想出了如何以--privileged 运行我的Docker 容器,这使得gdbserver 能够正确运行。我还更新了我的一些 CLion 配置并使其正常工作。

有用的链接:

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

还有我的运行配置:

  • GDB:捆绑
  • '目标远程'参数:tcp:localhost:7777
  • Symbolfile:我编译的二进制文件的本地副本(感谢卷从 Docker 复制)
  • Sysroot:(空白)
  • Pathmappings:我在Docker中的项目目录的绝对路径,以及我本地机器上同一个项目目录的绝对路径(同一个卷)

像魅力一样工作。

【讨论】:

  • 而不是--privileged--cap-add SYS_PTRACE 应该也能正常工作,并且给予容器更少的权限。
猜你喜欢
  • 2016-04-16
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
相关资源
最近更新 更多