Ubuntu18.04 利用VSCode调试ROS---GDB调试 (C++ & Python)


2022.5.30 updated
之前写的是调试C++代码的方法,这次补充了python版本代码的调试方法,也很简单,加几步操作即可。


1. C++版本调试方法

其实在VS就能调试ROS,不需要单独打开系统的terminal来调试。

具体操作如下:

  1. 先安装VS的ROS插件,在左侧工具栏中找到拓展模块(Extensions),快捷键Ctrl+shift+X
    在搜索栏输入ROS,看到第一个,点开安装即可,发布者是Microsoft,会有维护。
    ros

  2. 安装完后,在VS里面打开terminal,快捷键Ctrl+`

    然后进入自己的ROS工作空间,比如catkin_ws,然后常规操作, roscore &source devel/setup.bash

  3. 然后开始调用GDB生成配置文件launch.json
    1)先在左侧工具栏找到Run and Debug --> 然后点击如下图所示的齿轮图片旁边的小箭头–>选择里面Add configuration–> 就创建了launch.json文件
    debug


上面这步操作,也是在最上面的工具栏,Run --> Start Debugging–>选择C++(GDB/LLDB)–> 就创建了launch.json文件
在这里插入图片描述
在这里插入图片描述


  1. 然后就可以看到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",
  1. 接着打开CMakeLists.txt,修改成debug模式,添加: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. 然后断点调试那些,就跟往常没什么两样了,在代码行数左侧添加红点。
  2. 按F5就可以成功编译了。

单步调试的时候也遇到些问题,记一下:
(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就完事了。

2. Python版本调试方法

大部分操作跟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
如果不选择python版本会报错,提示找不到’rospy’这个包,因为rospy是用2.7版本写的

完成上面两步后,打好断电,按F5就可以进入Debug模式了。
result

Reference

  1. Ubuntu16.04系统下如何用VSCode调试ROS:
    https://www.zhihu.com/zvideo/1284993884544606208
  2. 使用VS Code调试ROS或其他可执行程序--gdb的使用:
    https://blog.csdn.net/xihuanzhi1854/article/details/104064180
    3.Ubuntu下Vscode调试出现[无法打开"libc-start.c":无法读取文件…错误解决办法:
    https://blog.csdn.net/weixin_39758398/article/details/101912759
  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值