我正在尝试在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)
,然后挂起。我也尝试过: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上可以使用。
答案 0 :(得分:1)
我弄清楚了如何以throw new ArgumentException(nameof(outputFilePath));
的身份运行Docker容器,从而使throw new ArgumentException("outputFilePath");
能够正确运行。我还更新了一些CLion配置并使其正常工作。
有用的链接:
我更新的docker命令--privileged
我的运行配置:
像魅力一样工作。