一、 vscode安装相应插件
- c/c++
- c++ intellisence
- python
- cmake
- ROS
二 、vscode的编译配置
2.1 检查CMakeList.txt文件,确保是debug模式
确认CMakeList.txt文件为debug模式,CMakeList.txt中的下面这段话一定要注释
#set(CMAKE_BUILD_TYPE Release)
否则即使在编译的时候即使设置了-DCMAKE_BUILD_TYPE=Debug,调试时一样会无法进入断点。
2.2 C/C++编译设置
在工作区目录终端下输入
catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
会在build目录下生成compile_commands.json
文件
添加以下信息文件到.vscode/c_cpp_properties.json文件中的相应位置
"name": "ROS",
"intelliSenseMode": "gcc-x64",
"compilerPath": "/usr/bin/g++",
"cStandard": "c11",
"cppStandard": "c++11",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
2.3 建立task.json,设置catkin_make
参数
Ctrl+Shift+P,然后键入tasks: Configure Task
选择catkin_make:build,会在.vscode文件夹下自动生成文件task.json(需要vscode安装ros插件)
在args
参数中添加设置"-DCMAKE_BUILD_TYPE=Debug"
# task.json
{
"version": "2.0.0",
"tasks": [
{
"type": "catkin_make",
"args": [
"--directory",
"/home/wanghuohuo/catkin_ws5",
"-DCMAKE_BUILD_TYPE=RelWithDebInfo",
"-DCMAKE_BUILD_TYPE=Debug"
],
"problemMatcher": [
"$catkin-gcc"
],
"group": {
"kind":"build",
"isDefault":true
},
"label": "catkin_make: build"
}
]
}
在args参数中修改工作空间目录为自己的目录
"/home/wanghuohuo/catkin_ws5",
- 然后Ctrl+Shift+B就可以编译(使用task设置catkin_make编译的参数)
另外还可以添加其他一些使用的参数,例如:"group": {"kind":"build","isDefault":true},"isDefault":true代表直接执行command,如果为false还需要在build下拉里面选一下;及其他catkin_make命令后加的变量参数。
注意:利用ctrl + shif + b快捷键编译,或者点击Terminal-> Run Build Task编译前,需要将所需编译包所在的workspace的文件夹放到vscode workspace的第一位,否则无法选择到需要编译的包。
三、vscode的调试步骤
3.1 建立launch.json文件
新建配置:依次点击图中图标,然后选择ROS
, ROS: Attach
,便会在.vscode
文件夹下自动生成launch.jso
n文件(或通过Ctrl + Shift + D
,下拉添加配置,自动生成该文件)。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "ROS: Attach", //调试配置的名称,此处为ROS: Attach
"request": "attach",
"type": "ros"
}
]
}
3.2 设置断点
在vscode中找到需要调试的程序,在前面添加断点
3.3 运行程序
打开vscode的终端,命令行运行程序
3.4 调试到指定node程序
在vscode的debug界面,点击绿色三角形进行debug,选择C/C++
,输入节点名称,节点名称就是该文件通过CMakeList.txt设置的可执行程序的名称,程序会自动在文件中的断点处停止。
四 trouble shooting:
4.1 打开文件夹没有.vscode
先编译,再用vscode打开,就会自动生存.vscode文件夹,自动配置c_cpp_properties.json文件,这个功能是ROS的插件完成的
4.2 编译提示找不到compile_commands.json
文件
在工作区目录终端下输入
catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
会在build目录下生成compile_commands.json
文件
4.3 无法进入debug模式
重新再试试
检查CMakelist.txt文件的release设置
4.4 debug模式下,变量出现optimized out,无法查看
每次用vscode打开ROS工作区文件夹,setting.json文件中都会添加的path重复了,也会导致optimized out...
{
"python.autoComplete.extraPaths": [
"/opt/ros/melodic/lib/python2.7/dist-packages"
],
"python.analysis.extraPaths": [
"/opt/ros/melodic/lib/python2.7/dist-packages"
]
}
删除第二个参数即可
{
"python.autoComplete.extraPaths": [
"/opt/ros/melodic/lib/python2.7/dist-packages"
]
}
好像和编译方式也有关!ctrl+shift+b编译,选择第二个catkin_make:build