VScode 调试ROS程序

读Livox_horizon_loam的ROS程序,对ROS采回来的雷达的数据格式和中间的数据转换理解不透,就将程序导入VScode,尝试通过调试查看数据的内容和格式的变化。在此记录一下。

1、安装好VScode之后,首先下载C/C++,C++ Intellisense, ROS,ROS(deprecated)这几个插件。

2、在原工作区间目录下执行如下命令:

catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1

3、在VScode中导入该工作区间,就会出现以下四个文件

其中c_cpp_properties.json自动生成的结果如下,一般不需要修改

{
    "configurations": [
        {
            "browse": {
                "databaseFilename": "",
                "limitSymbolsToIncludedHeaders": true
            },
            "includePath": [
                "/home/XXX/catkin_horizon/devel/include/**",
                "/opt/ros/kinetic/include/**",
                "/home/XXX/catkin_horizon/src/livox_horizon_loam/include/**",
                "/usr/include/**"
            ],
            "name": "ROS",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu11",
            "cppStandard": "c++17",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json"
        }
    ],
    "version": 4
}

launch.json生成的文件如下,利用gdb工具进行调试,其中“program”改成需要进行调试、设置断点的节点的二进制可执行文件目录,我的是在/devel/lib下。

{

    "version": "0.2.0",
    "configurations": [
            {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/devel/lib/loam_horizon/livox_repub",//可执行的二进制文件的目录
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            //"preLaunchTask": "make build"//最好删了,不然会影响调试,每次调试都直接执行make build
        }
    ]
}

settings.json无需修改,task.json修改内容如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        },
    ]
}

4、之后就可以在节点中“program”中指定的节点中设置断点,查看中间变量。注意要在终端先运行roscore。

在查看中间变量过程中,发现有一部分变量显示已被优化,不能查看具体的数据,这个问题需要在CMakeLists.txt中将下面这句中的 -O2改为-O0,意思是在调试过程在放弃优化,方便查看中间变量,注意要在调试完成,程序准备完整正式运行时再修改回去以加快运行速度。

set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -g")

 


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