基于VS Code的ROS2代码调试配置

实现基于VS Code的ROS2代码调试配置需要完成以下三个文件的配置:

1、c_cpp_properties.json

{
    "configurations": [
        {
            "name": "ROS2",
            "includePath": [
                "${workspaceFolder}/src/**",
                "${workspaceFolder}/install/**/include/**",
                "/opt/ros/humble/include/**",
                "/usr/include/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/g++",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "linux-gcc-x64",
            "configurationProvider": "ms-vscode.cmake-tools"
        }
    ],
    "version": 4
}

注:includePath中ROS2版本根据实际情况进行修改。

2、launch.json

{
    "version": "0.2.0",
    "configurations": [
        // 调试服务端节点示例(cpp02_service包)
        {
            "name": "Debug demo01_server",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/cpp02_service/demo01_server",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [
                {
                    "name": "ROS_DOMAIN_ID",
                    "value": "0"
                },
                {
                    "name": "LD_LIBRARY_PATH",
                    "value": "${workspaceFolder}/install/base_interfaces/lib:${workspaceFolder}/install/cpp02_service/lib:/opt/ros/humble/lib:$LD_LIBRARY_PATH"
                },
                {
                    "name": "ROS_PACKAGE_PATH",
                    "value": "${workspaceFolder}/src:$ROS_PACKAGE_PATH"
                }
            ],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "colcon build", // 调试前自动编译
            "miDebuggerPath": "/usr/bin/gdb",
            "logging": {
                "moduleLoad": false,
                "trace": true
            }
        },
        // 调试客户端节点示例(cpp02_service包)
        {
            "name": "Debug demo02_client",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/cpp02_service/demo02_client",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [
                {
                    "name": "ROS_DOMAIN_ID",
                    "value": "0"
                },
                {
                    "name": "LD_LIBRARY_PATH",
                    "value": "${workspaceFolder}/install/base_interfaces/lib:${workspaceFolder}/install/cpp02_service/lib:/opt/ros/humble/lib:$LD_LIBRARY_PATH"
                }
            ],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "colcon build",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

注:环境变量LD_LIBRARY_PATH中必须添加ROS2的lib路径,负责提示链接库失败问题。

3、tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "colcon build",
            "type": "shell",
            "command": "colcon build --packages-select base_interfaces cpp02_service cpp02_cs cpp04_action cpp04_action_cs --cmake-args -DCMAKE_BUILD_TYPE=Debug",
            "args": [],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "使用colcon编译指定ROS2包"
        }
    ]
}

注:command中执行colcon build时必须添加--cmake-args -DCMAKE_BUILD_TYPE=Debug参数,负责调试时无法进入断点。

参考:VS Code 使用教程 | 人人都懂物联网

### 如何在 VSCode 中进行 ROS 代码的断点调试 #### Attach 调试模式 Attach 模式允许开发者连接到已经运行中的节点进程。这种方式适合于那些启动时间较长或者依赖复杂环境配置才能正常工作的节点。通过附加的方式,可以在不影响现有流程的情况下随时开启调试会话。 对于 `learning_topic` 功能包而言,在使用 Attach 方式时,需先手动启动目标节点,之后再让 Visual Studio Code 连接到该进程中去[^1]。 #### Launch 调试模式 相比之下,Launch 方法则是由 IDE 自身负责启动指定的目标程序并立即进入调试状态。这更适合简单的测试场景或是希望从头跟踪整个执行过程的情况。当采用这种方法来处理基于 C++ 的 ROS 节点项目时,应当确保 `.vscode/launch.json` 文件内包含了正确的构建路径以及可执行文件位置等必要参数设定[^2]。 为了实现更灵活的时间序列数据重放机制(类似于 MATLAB S-function),可以考虑结合 rosbag 工具与条件性日志记录技术共同作用。具体做法是在每次接收到消息之前检查当前是否处于暂停状态下;如果是,则暂时阻止后续操作直到恢复为止。这样即使 bag 文件持续发送新信息也不会干扰正常的单步执行逻辑[^3]。 ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Attach to running node", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/devel/lib/${PROJECT_NAME}/${NODE_NAME}", "MIMode": "gdb" }, { "name": "(gdb) Launch Node", "type": "cppdbg", "request": "launch", "targetArchitecture": "x64", "program": "${workspaceFolder}/build/${PROJECT_NAME}/${NODE_NAME}", "args" : [], "stopAtEntry": false, "cwd": "${workspaceFolder}" } ] } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值