【ROS】ROS使用GDB调试

【ROS】ROS使用GDB调试

  • 一、引言
  • 二、ROS设置编译模式为Debug
  • 三、ROS使用GDB调试
    • 3.1 rosrun启动gdb调试
    • 3.2 rosrun启动GDB调试
    • 3.2 直接在devel/lib使用gdb运行程序
  • 四、GDB指令

一、引言

  在程序开发过程中难免遇到一些bug,Linux系统中通常使用ROS进行程序调试。这里推荐大佬的博文ROS在线调试(使用GDB)。
  ROS官方列出了许多可用的IDE:如VScode, Qtcreator, Ecllipse, Clion等,而这些不方便快速的调试。

二、ROS设置编译模式为Debug

  ROS程序进行catkin_make时默认不是以debug模式进行编译的,这就导致程序在进行gdb调试的时候不能跳转到源代码,只能进入断点。
  普通的非ROS程序用gdb怎么调试呢?可以有两种方法~

  1. 使用catkin_make时添加
catkin_make -DCMAKE_BUILD_TYPE=Debug
  1. 直接修改CMakelist.txt,添加以下代码:
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

三、ROS使用GDB调试

  通常ROS节点程序的启动方法有两个:rosrunroslaunch,下面也针对这两种启动方法介绍对应的调试步骤。

3.1 rosrun启动gdb调试

  修改ROS launch文件,在node标签中添加一句话:

launch-prefix="xterm -e gdb -ex run --args "

例如:

<node pkg="ros_tutorials_topic" type="topic_publisher" name="topic_publisher" launch-prefix="xterm -e gdb -ex run --args "/>
#添加run在gdb调试时会自动开始执行程序

附:roslaunch node前缀
The launch-prefix attribute of the tag that, among other things, makes it easy to debug a ROS node process. Here are some example launch-prefixes you might find useful:
launch-prefix=“xterm -e gdb --args” : run your node in a gdb in a separate xterm window, manually type run to start it
launch-prefix=“gdb -ex run --args” : run your node in gdb in the same xterm as your launch without having to type run to start it
launch-prefix=“stterm -g 200x60 -e gdb -ex run --args” : run your node in gdb in a new stterm window without having to type run to start it
launch-prefix=“valgrind” : run your node in valgrind
这个valgrind工具可以用于检测内存泄露,并执行性能分析
launch-prefix=“xterm -e” : run your node in a separate xterm window
launch-prefix=“nice” : nice your process to lower its CPU usage
launch-prefix=“screen -d -m gdb --args” : useful if the node is being run on another machine; you can then ssh to that machine and do screen -D -R to see the gdb session
launch-prefix=“xterm -e python -m pdb” : run your python node a separate xterm window in pdb for debugging; manually type run to start it

【ROS】ROS使用GDB调试_第1张图片
【ROS】ROS使用GDB调试_第2张图片

3.2 rosrun启动GDB调试

  在使用rosrun执行程序时添加以下选项;

rosrun --prefix 'gdb -ex run --args' [package_name] [node_name] 

【ROS】ROS使用GDB调试_第3张图片

3.2 直接在devel/lib使用gdb运行程序

  在执行catkin_make之后会在devel/lib对应的节点文件下生成可执行文件,在source devel/setup.bash之后可以直接在devel/lib执行以下程序,然后继续使用gdb指令进行调试即可

gdb your_node_name

四、GDB指令

  这里暂时先参考爱编程的大丙的优秀文章,这里暂时不介绍过多。

你可能感兴趣的:(ROS,Linux开发调试记录,GDB,linux,ubuntu)