vscode gdb不进断点_使用VSCode对ROS多节点工程单步调试

前言

第一篇文章留下了一个坑,在之前学习VINSFusion的时候,不知道如何单步调试ROS框架下的工程。近几天get到了调试的小技巧,来填一下坑。

遇到的问题

ROS工程通常是喂后缀名为XXX.bag的数据流文件给整个系统,使用之前的方法,就会遇到这么一个问题,我数据喂进去了,断点也打了,可是一直进不去某个断点的位置。

然后事实上是我的问题,我把多进程数目设置为0后就可以调试了,但是这个方法有些繁琐。

新工具

使用VSCode中的ROS插件,可以让调试过程更方便一点。

57775ce5b84dde467888cb63bfcdcc4e.png

生成c_cpp_properties.json和task.json的方式与之前的相同,详细可见这篇文章如何使用VsCode对VINS-Fusion进行单步调试

后面不同的地方就是launch.json的生成,具体步骤如下:

点击创建launch.json文件,选择弹出框中ROS这一项

bfe77b73112f7f38b6f9f249da200f81.png

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

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

e62a5d3b9fd28400933949b727000325.png

如果你的工程启动文件是写在launch中的,一般是启动多个节点,选择ros_launch

如果没有launch文件,选择ros_node

这里的文件有点多,需要仔细找一下。

98236ce490b15aa1016140fe924e08da.png

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

ff7e0010859eb58cf58f16f053a93d5b.png

记得在CMackLists.txt文件中设置Debug模式

SET(CMAKE_BUILD_TYPE Debug)

有可能要增加C++11标准

add_compile_options(-std=c++11)

点击调试小蜘蛛,把bag文件喂进去,就可以进行单步调试了。

如果是多进程的工程,会出现下面这个问题,但对调试过程没有影响

ea0fbfeac99900ae9e05965798d0dcad.png

要是忍受不了(强迫症作祟)

设置gdb 为non-stop 模式,打开~/.gdbinit(如果没有这个文件则自己新建一个同名文档),然后添加一下三行即可。

set target-async 1set pagination offset non-stop on

版权声明:本文为weixin_39932458原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。