背景:
ros是以docker模式运行,程序运行在docker中。
cmake使能gdb与debug调试
参考:vscode中ros c++代码调试
CMakeLists.txt 添加
SET(CMAKE_BUILD_TYPE Debug)
# SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
# SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
方法1:在docker中安装vscode插件
1.vscode安装docker插件
2.运行docker
# 下载ros2 humble arm64版本
docker pull --platform linux/arm64/v8 ros:humble-ros-base
# 运行docker ros2
docker run -it ros:humble-ros-base bash
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c21b6d8c8fc ros:humble-ros-base "/ros_entrypoint.sh …" 2 minutes ago Up 2 minutes zen_hodgkin
3.vscode连接到docker中服务,操作如下
4.在新vscode窗口中,安装对应c/c++,python,其它语言的开发调试器,即可正常调试。
方法2:通过网络端口远程调试
1.准备条件: 运行docker run时,添加端口映射
--net=host \
-p 本机端口:容器端口/协议 \
实例:
docker run -it
--name ros2
--net=host \
-p 6688:6688/tcp \
ros:humble-ros-base bash
# 宿主机端口tcp 6688,映射到容器端口tcp 6688
2.docker 服务中运行 gdbserver
docker exec -it ros2 bash
#### 方式1.docker服务中启动程序
gdbserver localhost:6688 demo.out
#### 方式2.docker attach连接已运行的程序
查找demo.out 进程
gdbserver --attach localhost:6688 demo.out_pid
3.宿主机vscode配置,如gdb远程调试
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 附加",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/demo.out",
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb",
// 远程调试 ip:port
"miDebuggerServerAddress": "127.0.0.1:6688",
}
]
}
注意自己修改
-
program 程序位置
-
miDebuggerServerAddress 远程调试 ip:port
总结:
远程调试真的难啊,哈哈