文章目录
1.安装扩展
包括c/c++,ros,cmake
2.配置json文件
假设ros的工作空间文件夹是catkin_ws,则在该文件夹下用vscode打开
2.1 生成json文件
按下Ctrl + Shift + P, 然后输入catkin_make,选择ROS Create Catkin Package,这里随便整个包名就行,后面可以把包删除了,主要就是要生成一个.vscode文件夹。文件夹路径应该是这样的
2.2 修改c_cpp_properties.json
编译输出信息文件,执行:
catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
这个命令会输出一个compile_commands.json文件在ROS工作空间的build文件夹下面
添加以下信息文件到c_cpp_properties.json文件中的相应位置:其实上面执行2.1步骤的时候,生成的c_cpp_properties.json文件里面自带有内容,我们一般只需要修改下compileCommands就行,就是对应的compile_commands.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
- Ctrl+Shift+P,然后键入tasks: Configure Task,
- 选择catkin_make:build,会在.vscode文件夹下自动生成文件task.json。
- 然后Ctrl+Shift+B就可以编译(其实默认使用的是catkin_make)
这里会生成一个task.json文件,但是注意把label改成catkin_make,这里就是表示个名称,可以自己定义,只需要跟后面launch.json里面对应就行
参考
{
"version": "2.0.0",
"tasks": [
{
"type": "catkin_make",
"args": [
"--directory",
"/home/shuiliu/catkin_ws",
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
//"-j4", //使用4个线程编译
//"-DCMAKE_BUILD_TYPE=Debug"
//"-DCATKIN_WHITELIST_PACKAGES=<package_name>"
],
"problemMatcher": [
"$catkin-gcc"
],
"group": "build",
"label": "catkin_make",
"presentation": {//关闭“终端将被任务重用,按任意键关闭”的提示
"echo": true,
"reveal": "always",
"focus": false,
"panel": "dedicated", //任务间不共享面板, 同一个任务共享相同面板.
"showReuseMessage": false, //控制是否显示“终端将被任务重用, 按任意键关闭”提示.
"clear": false
}
}
]
}
ctrl + shif + b,可以快速编译
2.4 修改launch.json
创建launch.json文件
添加内容,下面是参考,注意下面几个点
- program:对应可执行文件的路径,一般在devel/lib/包名/可执行文件名
- args:表示对应执行文件的参数,用“”和,分隔
- preLaunchTask:要跟task.json里面的label对应
下面是debug工程 vins-mono里面的feature_tracker的例子
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",// 配置名称,将会在调试配置下拉列表中显示
"type": "cppdbg",// 调试器类型 该值自动生成
"request": "launch", // 调试方式,还可以选择attach
"program": "${workspaceFolder}/devel/lib/feature_tracker/feature_tracker",//要调试的程序(完整路径,支持相对路径)
"args": ["_config_file","CONFIG_PATH","_vins_folder","$VINS_PATH"],// 传递给上面程序的参数,没有参数留空即可
"stopAtEntry": false,// 是否停在程序入口点(停在main函数开始)
"cwd": "${workspaceFolder}",// 调试程序时的工作目录
"environment": [],//针对调试的程序,要添加到环境中的环境变量. 例如: [ { "name": "squid", "value": "clam" } ]
"externalConsole": false, //如果设置为true,则为应用程序启动外部控制台。 如果为false,则不会启动控制台,并使用VS Code的内置调试控制台。
"MIMode": "gdb", // VSCode要使用的调试工具
"preLaunchTask": "catkin_make",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
3. CMakeLists.txt文件设置
在对应包的CMakeLists.txt,最前面填写下面的
SET(CMAKE_BUILD_TYPE Debug)
下面这个可选
add_compile_options(-std=c++11)
4. 运行和设置断点
设置断点,再点击运行就行了。比如我可以在命令行里面运行roscore和rostopic来发布数据,运行feature_tracker来debug
5. 加入监视变量
断点触发后,可以添加想看的变量来监视
添加的语法
- 添加普通变量,就直接加入变量名就行
- 如果先看十六进制的话,在变量名后面加上 ,h
//比如这样
data,h
- 添加数组,特别是如果想看Eigen的数据
*(type(*)[number] name
//比如这里delta_x_变量是VecX的类型,我就可以把它看成double类型的数组添加,这里我想看前10个,number可自己设置
*(double(*)[10])delta_x_