gpt4 book ai didi

docker - 在 Docker 内部运行时,GDBServer 未启动或监听端口

转载 作者:行者123 更新时间:2023-11-29 08:18:13 25 4
gpt4 key购买 nike

我正在尝试在 Docker 容器中编译“hello world”Rust 程序,然后使用 GDBServer 和 CLion 对其进行远程调试,但我认为 gdbserver 未正确启动。当我启动它时,我没有收到我期望的“进程已启动”和“正在端口上监听...”消息;我一无所获。

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

我的最终目标是将这个 Docker 容器部署在 Digital Ocean droplet 上,并从我的本地机器远程调试。现在,我已经在本地机器上运行了 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 上运行。我尝试添加 --debug 标志,该标志输出 my_waitpid (11, 0x0) 然后挂起。我还尝试了 :7777127.0.0.1:7777host:7777。我尝试了几个不同的端口。

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

最佳答案

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

有用的链接:

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

还有我的运行配置:

  • GDB:捆绑
  • '目标远程' args: tcp:localhost:7777
  • Symbolfile:我编译的二进制文件的本地副本(由于卷从 Docker 复制)
  • 系统根:(空白)
  • Pathmappings:我在Docker中的项目目录的绝对路径,以及我本地机器上相同项目目录(相同卷)的绝对路径

像魅力一样工作。

关于docker - 在 Docker 内部运行时,GDBServer 未启动或监听端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53871765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com