关于使用vscode修改docker容器里面的代码
开始的时候我下载了vscode中的docker插件,他自动又给我安装了Container Tool插件,我可以直接使用Container Tool进入容器修改代码。但是碰到了这个问题,就是我修改cpp代码后,重新编译,但是修改无效。甚至我故意加上语法错误,但是编译还是可以通过。每次只有catkin clean一下,才可以重新编译,下面记录这个问题的解决办法。
目录
前言:
开始的时候我下载了vscode中的docker插件,他自动又给我安装了Container Tool插件,我可以直接使用Container Tool进入容器修改代码。但是碰到了这个问题,就是我修改cpp代码后,重新编译,但是修改无效。甚至我故意加上语法错误,但是编译还是可以通过。每次只有catkin clean一下,才可以重新编译,下面记录这个问题的解决办法。
一、问题分析
对于catkin build以及catkin_make,他们编译的时候会考虑.cpp文件和.o文件的修改时间,如果.cpp文件的修改时间在.o文件之前,那么这个cpp文件就不会重新被编译了。
1.如何查看.cpp文件的修改时间
命令
stat test_node.cpp

cpp修改的时间就是Modify对应的时间,至少使用catkin编译的时候对比的是这个时间。
2.查看.o文件的修改时间
.o文件的目录在 build/功能包/CMakeFiles/节点名.dir/src目录下

二、问题原因
通过上面两个截图我们可以看出,即使cpp文件修改时间在.o文件之后,但是由于Modify时间在.o文件之前,所以即使修改了编译也给忽视了。
这是由于我是用的是vscode的docker插件自带的Container Tool插件,它能改文件内容,但是对于文件的状态,Change时间发生变化,但是Modify时间不变,导致编译忽视。
避坑下面的插件。


三、解决办法
1.安装Dev Containers插件
使用新的插件,名称是Dev Containers,安装发布版本,不然会报错(因为我的vscode版本低可能)。

2.Dev Containers使用方法
安装完成后如下

在另一个窗口中连接进入容器

如果你想要改变进入容器的目录

修改目录,重新进入容器便可。

四、结果展示
随便改了一下文件的内容,发现Modify时间都变成最新的了,此时可以正常编译。

更多推荐
所有评论(0)