赞
踩
打断点debug虽然不能直观看到变量在时间轴上的整体变化曲线,但是其针对某一帧问题数据,暂停后一步步单步执行监视每个变量的变化,方便直观的判断每一步逻辑的正确性,即使这个变量结构再复杂也能直接监视,可以准确定位到是哪一行代码出了问题;
我的本机环境:
Ubuntu18.04 + docker + ROS + VSCode + C++(CMake编译)
ROS节点跑在docker容器内
在vscode安装以下插件
c/c++插件;
ROS插件;
docker插件;
Remote Development;
docker run -it –net=host –-name <容器名> -v <你的要打断点单步调试的ROS工程本机路径>:<你的要打断点单步调试的ROS工程容器内路径> <镜像名>:<tag名> bash
将下面的两个配置文件按照自己的ROS工程更改后放入工作空间.vscode文件夹:launch.json, tasks.json
//launch.json { "version": "0.2.0", "configurations": [ { "name": "hello_world_node", //节点名 "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/devel/lib/hello_world/my_hello_world_node", //节点可执行文件 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", //"${fileDirname}", "environment": [], "externalConsole": false, "preLaunchTask": "prerun", "MIMode": "gdb", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "miDebuggerPath": "/usr/bin/gdb", "debugStdLib": true } ] }
//tasks.json { "version": "2.0.0", "tasks": [ { "label": "prerun", "type": "shell", "command": "source devel/setup.bash && export ROS_MASTER_URI=http://172.17.0.1:11311/ " //这里填入你自己的rosmaster ip }, { "label": "catkin build", "type": "shell", "command": "catkin_make", "args": [ "-DCMAKE_BUILD_TYPE=Debug", "-DCATKIN_BLACKLIST_PACKAGES=''", "-DCATKIN_WHITELIST_PACKAGES=hello_world_node",//这里填入你自己的包名 ], "group": { "kind": "build", "isDefault": true }, "presentation": { "reveal": "always" }, "problemMatcher": "$msCompile" }, ] }
在你要debug的节点的CMakeList.txt加入下面一句
add_definitions("-Wall -g")
安装了vscode的docker和remote development插件后,点击vscode左侧栏的”远程资源管理器”,Attach到你第一步创建的容器
打断点前,容器内还要安装gdb环境
apt-get install gdb
就在操作5弹出的容器内路径的vscode上,直接按F5或者点击”运行调试”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。