【ROS】ROS使用GDB调试
一、引言
在程序开发过程中难免遇到一些bug,Linux系统中通常使用ROS进行程序调试。这里推荐大佬的博文ROS在线调试(使用GDB)。
ROS官方列出了许多可用的IDE:如VScode, Qtcreator, Ecllipse, Clion等,而这些不方便快速的调试。
二、ROS设置编译模式为Debug
ROS
程序进行catkin_make
时默认不是以debug
模式进行编译的,这就导致程序在进行gdb
调试的时候不能跳转到源代码,只能进入断点。
普通的非ROS
程序用gdb
怎么调试呢?可以有两种方法~
- 使用
catkin_make
时添加
catkin_make -DCMAKE_BUILD_TYPE=Debug
- 直接修改
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
节点程序的启动方法有两个:rosrun
、roslaunch
,下面也针对这两种启动方法介绍对应的调试步骤。
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
3.2 rosrun启动GDB调试
在使用rosrun
执行程序时添加以下选项;
rosrun --prefix 'gdb -ex run --args' [package_name] [node_name]
3.2 直接在devel/lib使用gdb运行程序
在执行catkin_make
之后会在devel/lib
对应的节点文件下生成可执行文件,在source devel/setup.bash
之后可以直接在devel/lib
执行以下程序,然后继续使用gdb
指令进行调试即可
gdb your_node_name
四、GDB指令
这里暂时先参考爱编程的大丙的优秀文章,这里暂时不介绍过多。