VScode断点调试ROS

1.安装扩展

包括c/c++,ros,cmake

2.配置json文件

假设ros的工作空间文件夹是catkin_ws,则在该文件夹下用vscode打开

2.1 生成json文件

按下Ctrl + Shift + P, 然后输入catkin_make,选择ROS Create Catkin Package,这里随便整个包名就行,后面可以把包删除了,主要就是要生成一个.vscode文件夹。文件夹路径应该是这样的
catkin_ws文件夹

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文件
在这里插入图片描述
添加内容,下面是参考,注意下面几个点

  1. program:对应可执行文件的路径,一般在devel/lib/包名/可执行文件名
  2. args:表示对应执行文件的参数,用“”和,分隔
  3. 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. 加入监视变量

断点触发后,可以添加想看的变量来监视
在这里插入图片描述
添加的语法

  1. 添加普通变量,就直接加入变量名就行
  2. 如果先看十六进制的话,在变量名后面加上 ,h
//比如这样
data,h
  1. 添加数组,特别是如果想看Eigen的数据
*(type(*)[number] name
//比如这里delta_x_变量是VecX的类型,我就可以把它看成double类型的数组添加,这里我想看前10个,number可自己设置
*(double(*)[10])delta_x_
  • 27
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水流water

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值