当前位置:   article > 正文

VS CODE调试ROS/C++程序_module containing this breakpoin

module containing this breakpoin


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

通常步骤

1. 程序编译

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

catkin_make --only_pkg-with-deps package_name
  • 1

该命令可以单独的编译某个特定的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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这样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
                }
            ]
        }
    ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

解释下比较重要的几个选项:
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,再重新编译。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/496684
推荐阅读
相关标签
  

闽ICP备14008679号