vscode 调试简介1
本文档详细指南如何使用 Visual Studio Code (VSCode) 高效构建和执行基于 C++ 和 Python 的 ROS 2 项目。内容涵盖以下主题:初始化 VSCode、通过 SSH 进行远程开发、使用 Docker 进行开发、加载 ROS 依赖项以及使用 Colcon 进行构建。此外,文档还深入介绍了在 ROS 2 环境中使用 C++ 和 Python 的具体技术,提供了宝贵的见解和技巧,以优化开发流程。
编译带有调试信息都源文件(方法1)
通过vscode里面的task.json来进行调试,使用colcon build
加上--symlink-install
和--cmake-args -DCMAKE_BUILD_TYPE=Debug
,具体task.json文件编写如下:
{
"version": "2.0.0",
"tasks": [
{
"label": "colcon: build",
"type": "shell",
"command": [
"source /opt/ros/foxy/setup.bash;",
"colcon build",
"--symlink-install",
"--event-handlers console_cohesion+",
"--base-paths ${workspaceFolder}",
"--cmake-args -DCMAKE_BUILD_TYPE=Debug"
]
},
{
"label": "colcon: clean",
"type": "shell",
"command": [
"cd .;",
"rm -rf build/ install/ log/;"
]
},
{
"label": "colcon: test",
"type": "shell",
"command": [
"cd .;",
"source /opt/ros/foxy/setup.bash;",
"source install/setup.bash;",
"colcon test",
"--packages-select ros2_node",
"--event-handlers console_direct+;"
]
}
]
}
首先,执行 source /opt/ros/foxy/setup.bash
; 加载 ROS 2 Foxy 的环境变量,这对于后续使用 ROS 工具链是必须的。接下来,任务调用 colcon build 命令来构建工程,并传递了一系列构建参数:
- symlink-install:使用符号链接方式进行安装,这样可以加快构建速度并方便调试。
- event-handlers console_cohesion+:配置事件处理程序,提供更为集中的构建输出,便于跟踪构建过程。
- base-paths ${workspaceFolder}:指定构建的基础路径为当前工作区,确保构建工具正确定位工程根目录。
- cmake-args -DCMAKE_BUILD_TYPE=Debug:将调试模式(Debug)传递给 CMake,这通常用于开发和调试阶段,以便在遇到问题时能获得更详细的调试信息。
使用符号链接进行安装(symlink install)指的是在构建后,不将编译生成的文件拷贝到安装目录,而是在安装目录创建指向源码或构建目录中目标文件的符号链接。
编译带有调试信息都源文件(方法2)
通过CmakeLists里面的文件来进行调试,需要在CmakeLists
文件里面加入以下代码:
# 调试信息
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE)
endif()
# 禁用优化
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(COMPILE_OPTIONS -Wall -Wextra -Wpedantic -O0)
endif()
使用launch.json文件进行调试launch方法
文件配置如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "GDP: launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/install/planning/lib/planning/planning_main_node",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
// "preLaunchTask": "colcon: build",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
},
{
"description": "防止 gdb 打开标准库函数",
"text": "-interpreter-exec console \"skip -rfu std::.*\"",
"ignoreFailures": true
}
]
}
]
}
1. "version": "0.2.0"
这是 VS Code 调试配置文件的版本号,不同版本可能有不同的字段要求。
-
"configurations"
数组
该数组包含一个或多个调试配置,每个配置描述了如何启动调试会话。 -
"name": "GDP: launch"
用户可以在 VS Code 的调试面板中选择此名称来启动调试,这个名称只是一个友好标签,方便识别不同的调试配置。 -
"type": "cppdbg"
指定调试类型为 C++,内部通过 Microsoft C++ 调试扩展与 GDB 进行对接。 -
"request": "launch"
表明这是一个启动调试会话的配置,而不是附加到已有进程(“attach”)的方式。 -
"program": "\${workspaceFolder}/install/planning/lib/planning/planning_main_node"
要调试的可执行文件所在路径。其中 “${workspaceFolder}” 是当前工作区根目录的占位符。如果路径存在问题,需要确认生成的可执行文件是否位于该位置。 -
"args": []
传递给可执行文件的命令行参数,这里为空数组表示不传递任何参数。若需要指定命令行参数,可以在其中填入字符串,如 [“–option”, “value”]。 -
"stopAtEntry": false
设置为 true 时,在程序入口函数(main)处立刻暂停;设置为 false 表示程序会直接运行,直到遇到断点或异常才暂停。 -
"cwd": "${fileDirname}"
调试进程的当前工作目录,使用打开文件所在的目录。若要使用工作区根目录,可改成 “${workspaceFolder}”。 -
"environment": []
可以在这里传递环境变量给调试进程。此处为空数组表示不额外配置环境变量。 -
"externalConsole": false
若为 true,则会在外部终端窗口中显示程序输入输出;false 时在 VS Code 调试控制台输出。 -
"MIMode": "gdb"
使用 GDB 作为调试器。如果系统上安装了 GDB 并包含在 PATH 中,VS Code 将通过该模式与 GDB 通信。 -
"setupCommands"
一组在启动调试器后立即执行的命令,可用于配置 GDB 行为: -
"-enable-pretty-printing"
:启用对常见容器、Eigen、STL 等类型数据结构的易读打印。
15. "-gdb-set disassembly-flavor intel"
:将反汇编格式设置为 Intel 风格,替代 AT&T 风格。
"-interpreter-exec console "skip -rfu std::.*""
:使 GDB 跳过对标准库函数的断点或深入调试,以便专注于用户代码。
使用launch.json文件进行调试attach方法
{
"name": "Attach to ROS2 Node",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/install/planning/lib/planning/planning_main_node",
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
},
{
"description": "防止 gdb 打开标准库函数",
"text": "-interpreter-exec console \"skip -rfu std::.*\"",
"ignoreFailures": true
}
]
}