0%

VINS-Mono详解(二):使用Clion调试Docker中代码

本节内容参考链接

1. 构建Docker

为了构建支持远程调试的Docker,需要在Docker文件中添加如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
RUN apt-get update && apt-get install -y openssh-server rsync gdb gdbserver && \
mkdir /var/run/sshd && \
echo 'root:root' | chpasswd && \
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd && \
sed -i 's/\(^Port\)/#\1/' /etc/ssh/sshd_config && echo Port 2233 >> /etc/ssh/sshd_config

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 2233 7777 # 22 for ssh server. 7777 for gdb server

# RUN useradd -ms /bin/bash debugger
# RUN echo 'debugger:pwd' | chpasswd

注意,上面的命令中,为了防止DockerHost的SSH端口发生冲突,将DockeSSH端口重定向到了2233

端口。

然后运行如下命令,构建镜像:

1
docker build -t ros:vins-mono-screen .

2. 实例化镜像

1
docker run -it --name vins-mono-screen --network host ros:vins-mono-screen

示例化镜像后通过以下命令测试ssh配置是否成功:

1
ssh -p 2233 root@localhost

若提示密码设置不成功,可以通过以下命令重设密码:

1
passwd root

Docker中SSH服务没有启动,或手工更改了\etc\ssh\sshd_config中的参数,可以通过以下命令操作:

1
2
/etc/init.d/ssh restart
/etc/init.d/ssh start

3. 配置Clion

3.1 配置Toolchains

3.2 配置Deployment

Local Path的文件会上传到Deployment Path,然后在远程编译,完成配置后记得Resync代码。

4. 打开项目

完成以上配置后,打开工程项目。此时注意因为Clion通过SSH连接到Container时,是没有sourceROS的安装路径的,所以此时CMakelists.txtfind_package(catkin)将报错,此时,需要在CMakelists.txtfind_package(catkin)前添加如下命令:

1
set(CMAKE_PREFIX_PATH /opt/ros/kinetic /root/catkin_ws/devel)

另外,需要在Clion的Run/Debug Configurations中,增加相应的环境变量:

1
ROS_MASTER_URI=http://localhost:11311 # ros master
------ 本文结束 ------