2022.5.30 updated
之前写的是调试C++代码的方法,这次补充了python版本代码的调试方法,也很简单,加几步操作即可。
其实在VS就能调试ROS,不需要单独打开系统的terminal来调试。
具体操作如下:
先安装VS的ROS插件,在左侧工具栏中找到拓展模块(Extensions),快捷键Ctrl+shift+X
在搜索栏输入ROS,看到第一个,点开安装即可,发布者是Microsoft,会有维护。
安装完后,在VS里面打开terminal,快捷键Ctrl+`
然后进入自己的ROS工作空间,比如catkin_ws,然后常规操作, roscore &
和 source devel/setup.bash
然后开始调用GDB生成配置文件launch.json
1)先在左侧工具栏找到Run and Debug
--> 然后点击如下图所示的齿轮图片旁边的小箭头–>选择里面Add configuration
–> 就创建了launch.json
文件
上面这步操作,也是在最上面的工具栏,Run
--> Start Debugging
–>选择C++(GDB/LLDB)
–> 就创建了launch.json
文件
launch.json
文件,如下:{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
只需要修改其中的 "program": "enter program name, for example ${workspaceFolder}/a.out",
把需要编译的文件路径copy进去就可以了,绝对路径,比如:
"program": "/home/will/catkin_ws/devel/lib/gazebo_mobile_manipulator/pub_command_ik_sim_data_record",
SET(CMAKE_BUILD_TYPE Debug)
cmake_minimum_required(VERSION 2.8.3)
SET(CMAKE_BUILD_TYPE Debug)
add_compile_options( -std=c++11)
project(gazebo_mobile_manipulator)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)
add_executable(distance_control src/distance_control.cpp)
target_link_libraries(distance_control ${catkin_LIBRARIES})
单步调试的时候也遇到些问题,记一下:
(1)错误描述:无法打开"clock.c":无法读取文件(Error:找不到文件(/build/glibc-59d2JN/glibc-2.27/csu/clock.c))。
解决方案:
cd /
sudo mkdir build
cd build
sudo mkdir glibc-59d2JN
(创建的这个文件夹要注意与上面报错中的文件名保持一致)
cd glibc-LK5gWL
sudo wget http://ftp.gnu.org/gnu/glibc/glibc-2.27.tar.gz
(注意这里包的版本2.27对应报错版本)
sudo tar -zxvf glibc-2.27.tar.gz
出现这个错误就是确认一个包,手动添加就好了,提示缺什么版本就wget什么版本的包
(2)添加了断点后,调试时没有停下来。
解决方案:
建议,删掉build,重新catkin_make 一次,然后添加断点,再run一次,应该就没什么问题了,只要把上面的步骤做全,没什么大问题。
总结:
用GDB调试ROS代码,实际上就是添加launch.json
文件和修改CMakeLists.txt
就完事了。
大部分操作跟C++版本的调试方法一样,只需要修改两个地方就可以了
1)首先,打开launch.json
文件,然后修改里面的内容,建议先保存一份C++版本的json文件,然后再做修改,内容如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current file",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
上面的路径是 "program": "${file}"
,指的是当前运行的python文件,所以如果想指定某一个文件,只需要把路径copy进来就可以了,但是我觉得直接用这个就很方便,不针对某个文件,只运行当前的文件
2)第二点就是需要修改一下VScode里面当前运行的python版本,默认是3.6.9,但是我们ROS运行的是2.7,如下图,VS的界面左下角会显示当前的python版本,点击一下,会弹出一个新的列表,选择2.7版本即可。
如果不选择python版本会报错,提示找不到’rospy’这个包,因为rospy是用2.7版本写的
完成上面两步后,打好断电,按F5就可以进入Debug模式了。