在Docker内部运行时,GDBServer无法启动或在端口上监听

时间:2018-12-20 15:41:04

标签: docker debugging rust clion gdbserver

我正在尝试在Docker容器中编译一个“ hello world” Rust程序,然后使用GDBServer和CLion对其进行远程调试,但是我认为gdbserver不能正确启动。当我启动它时,我没有收到“期望的过程开始”和“正在监听端口...”消息;我什么也没得到。

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

我的最终目标是将这个Docker容器部署在Digital Ocean Droplet上,并从本地计算机进行远程调试。现在,我已经在本地计算机上运行Docker。

我正在Mac(Mojave)上工作,正在运行Docker(v18.09),并启动了an image built from Debian with Rust and gdbserver installed的Docker容器。 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上可以使用。

1 个答案:

答案 0 :(得分:1)

我弄清楚了如何以throw new ArgumentException(nameof(outputFilePath)); 的身份运行Docker容器,从而使throw new ArgumentException("outputFilePath"); 能够正确运行。我还更新了一些CLion配置并使其正常工作。

有用的链接:

我更新的docker命令--privileged

我的运行配置:

  • GDB:捆绑
  • “目标远程”参数:tcp:localhost:7777
  • Symbolfile:我的编译二进制文件的本地副本(由于卷而从Docker复制)
  • Sysroot :(空白)
  • 路径映射:Docker中我的项目目录的绝对路径,以及本地机器(相同卷)上的相同项目目录的绝对路径

像魅力一样工作。