VS CODE调试ROS/C++程序

8 篇文章 0 订阅


该文档将会持续进行更新,涉及ROS调试中遇到的一些问题。
C++程序的调试也相仿,只是去掉了启动 roscore的部分

通常步骤

1. 程序编译

这部分并不打算采用vscode的tasks.json来配置编译命令,而是选择手动的运行:

catkin_make --only_pkg-with-deps package_name

该命令可以单独的编译某个特定的package及其依赖项。
需要主要的是CMakeLists.txt应当修改成Debug模式:

OPTION(DEBUG_ON "Turn on DEBUG Mode" ON)
IF(DEBUG_ON)
MESSAGE("[Debug Mode]")
SET(CMAKE_BUILD_TYPE "Debug") 
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
ELSE()
MESSAGE("[Release Mode]")
SET(CMAKE_BUILD_TYPE "Release") 
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
ENDIF()

这样OPTION改成ON或者OFF,即可指定编译模式,比较方便。

2. 配置launch.json

这部分工作是本文的重点,单击vscode最右侧工具栏的Debug按钮(图标是一个甲虫+暂停),点击debug页里的齿轮按钮,即可打开launch.json。内容修改成如下状态:

{
    // 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": "LiTAMIN2",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/xyw/catkin_ws/devel/lib/test_registration/test_registration_node",
            "args": ["251370668.pcd","251371071.pcd"],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}/data",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

解释下比较重要的几个选项:
program: 输入可执行文件的所在位置,要求是绝对路径。如果是ROS的话,一般编译出来都在~/catkin_ws/devel/lib/包名/节点名
args: 传入到程序里的参数,即main接受的argv,不需要则设置为[]
stopAtEntry: 设置为true,则会在刚进入程序后直接暂停,比较方便的一共功能,建议使能。
cwd: 指定程序运行的环境,需要注意的是${workspaceFolder}指的是.vscode文件夹的上层路径,以我的环境为例,等价于/home/xyw/catkin_ws/src/test_registration
(详情见于vscode变量含义

3. 运行调试

在进入调试前,首先需要打开一个终端,运行roscore,否则节点无法正常启用。
启动后,按工具栏左侧的Debug按钮,点击出现的浮窗里的绿色箭头,即可开始调试。

出错解决

1. 无法载入断点

报错信息:Module containing this breakpoint has not yet loaded or the breakpoint address could not be obtained.
这一般是因为编译时没有加-g导致的。有时候即便OPTION改成了ON,但编译依然还会按照OFF进行,这一点可以从编译输出信息里得到确认。
解决方法catkin_make --only_pkg-with-deps package_name加上后缀DDEBUG_ON=ON,再重新编译。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值