前言
第一篇文章留下了一个坑,在之前学习VINSFusion的时候,不知道如何单步调试ROS框架下的工程。近几天get到了调试的小技巧,来填一下坑。
遇到的问题
ROS工程通常是喂后缀名为XXX.bag的数据流文件给整个系统,使用之前的方法,就会遇到这么一个问题,我数据喂进去了,断点也打了,可是一直进不去某个断点的位置。
然后事实上是我的问题,我把多进程数目设置为0后就可以调试了,但是这个方法有些繁琐。
新工具
使用VSCode中的ROS插件,可以让调试过程更方便一点。

生成c_cpp_properties.json和task.json的方式与之前的相同,详细可见这篇文章如何使用VsCode对VINS-Fusion进行单步调试
后面不同的地方就是launch.json的生成,具体步骤如下:
点击创建launch.json文件,选择弹出框中ROS这一项

如果工程是多节点的,选择Launch
如果工程是单节点的,选择Attach

如果你的工程启动文件是写在launch中的,一般是启动多个节点,选择ros_launch
如果没有launch文件,选择ros_node
这里的文件有点多,需要仔细找一下。

选择一个模板,得到下面的json文件,在target这一项要填入你的launch文件所在的绝对路径。

记得在CMackLists.txt文件中设置Debug模式
SET(CMAKE_BUILD_TYPE Debug)有可能要增加C++11标准
add_compile_options(-std=c++11)点击调试小蜘蛛,把bag文件喂进去,就可以进行单步调试了。
如果是多进程的工程,会出现下面这个问题,但对调试过程没有影响

要是忍受不了(强迫症作祟)
设置gdb 为non-stop 模式,打开~/.gdbinit(如果没有这个文件则自己新建一个同名文档),然后添加一下三行即可。
set target-async 1set pagination offset non-stop on版权声明:本文为weixin_39932458原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。