1、下vscode和插件
参考这个也行
https://zhuanlan.zhihu.com/p/704522656
2、编译debug版本并修改json
要在 Visual Studio Code (VSCode) 中进行断点调试 ROS 任务,你需要进行以下几个步骤:
1. 安装所需插件
**C/C++ 插件**: 提供对 C++ 代码的调试支持。
**ROS 插件**: 提供对 ROS 工作空间的集成支持(可选,但对 ROS 开发有帮助)。
2. 配置 CMake 和编译
确保你的 ROS 包和工作空间已经使用 `catkin_make` 或 `catkin build` 编译成功,并且包含了调试信息。在 `CMakeLists.txt` 文件中,确保添加了以下行来启用调试信息:
```cmake
set(CMAKE_BUILD_TYPE Debug)
```
然后,重新编译你的工作空间:
```bash
cd ~/catkin_ws
catkin_make
```
3. 配置调试环境
创建一个 `launch.json` 文件来配置 VSCode 的调试设置:
打开 VSCode,进入你的工作空间目录。
在左侧活动栏中点击调试图标(一个播放按钮和一个错误标记的图标),然后点击"创建一个 `launch.json` 文件"。
选择"C++ (GDB/LLDB)"作为环境。
编辑生成的 `launch.json` 文件,添加适用于 ROS 的配置。下面是一个示例配置:
```json
{
"version": "0.2.0",
"configurations": [
{
"name": "ROS Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/devel/lib/your_package/your_node",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build",
"miDebuggerPath": "/usr/bin/gdb",
"internalConsoleOptions": "openOnSessionStart",
"logging": {
"moduleLoad": true
}
}
]
}
```
确保将 `"program"` 字段设置为你的 ROS 节点的实际可执行文件路径(可以在 `devel/lib/your_package/` 目录下找到)。
4. 配置任务
创建一个 `tasks.json` 文件来配置构建任务:
在 `.vscode` 目录下创建一个 `tasks.json` 文件(如果尚未存在)。
添加以下内容以构建你的 ROS 包:
```json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "catkin_make",
"args": [
"--this"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"],
"detail": "Generated task by VSCode."
}
]
}
```
5. 设置断点
在 VSCode 的编辑器中打开你的源代码文件,点击行号左侧的空白区域来设置断点。
6. 启动调试
确保 ROS 节点没有运行。
在 VSCode 中,点击左侧的调试图标,然后选择刚才创建的 `ROS Debug` 配置。
点击绿色的播放按钮开始调试。调试器将启动你的节点,并在设置的断点处暂停。
7. 运行 ROS Launch
如果你需要通过 `roslaunch` 启动整个 ROS 系统并调试其中的节点,可以在 VSCode 外部先启动 `roslaunch`,然后使用 VSCode 调试单个节点。
小提示
确保 GDB 和其他调试工具已正确安装,并在系统路径中。
如果调试过程中出现问题,可以查看 VSCode 的调试控制台和终端输出,获取更多的调试信息。
通过这些步骤,你应该能够在 VSCode 中进行 ROS 任务的断点调试。如果遇到具体问题,可以进一步调整配置或提供更多细节以获得帮助。
比如这是我的launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "ROS Debug",
"type": "cppdbg",
"request": "launch",
"program": "/home/kj/catkin_ws/devel/lib/cocolic/odometry_node",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build",
"miDebuggerPath": "/usr/bin/gdb",
"internalConsoleOptions": "openOnSessionStart",
"logging": {
"moduleLoad": true
}
}
]
}
这是我的tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "catkin_make",
"args": [
"--directory",
"/home/kj/catkin_ws",
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
],
"problemMatcher": [
"$catkin-gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Build ROS workspace using catkin_make"
}
]
}
3、调试遇见include找不到的问题
[{ "resource": "/home/kj/catkin_ws/src/Coco-LIC/src/odometry_node.cpp", "owner": "C/C++: IntelliSense", "code": "1696", "severity": 8, "message": "无法打开 源 文件 \"odom/odometry_manager.h\"", "source": "C/C++", "startLineNumber": 22, "startColumn": 1, "endLineNumber": 22, "endColumn": 35 }]
解决方案是,增加一条IncludePath
4、[ERROR] [1722929440.191555478]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying... 断点调试遇到这种问题
错误通常是因为 ROS master 没有运行或是环境变量
ROS_MASTER_URI
没有正确设置。在终端中你通常会手动运行roscore
来启动 ROS master,但在调试时可能没有这样做。比如控制台的命令是:roslaunch cocolic odometry.launch config_path:=config/ct_odometry_r3live.yaml
解决方案:
第一:在非vscode中的控制台下输入(起到一个类似监视的作用)
roscore
第二:确保正确设置 ROS_MASTER_URI
和 ROS_IP
: 确保在调试环境中设置了正确的环境变量。可以在 launch.json
中设置环境变量。
然后就可以进行断点调试了
5、断点调试中,发现需要输入参数
原始命令行:roslaunch cocolic odometry.launch config_path:=config/ct_odometry_r3live.yaml
需要在aunch.json中增加args的信息