Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

ROS学习  ROS程序的GDB调试和调试信息

$
0
0
作者:Sam (甄峰)  sam_code@hotmail.com

在使用C++开发ROS程序时,经常需要逐行调试代码。 这时就需要用到GDB了。

之前在Linux上使用GDB, 在嵌入式系统或Android使用过GDB Server。 知道GDB使用中需要注意哪些问题。
1. 编译时,需要加入-g 选项。
2. 不能有任何strip的动作。不能被去掉debug信息。

1. 处理CMakeLists.txt文件:
set (CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS}  -g ")
set (CMAKE_VERBOSE_MAKEFILE ON)

第一句保证了CXXFLAGS被加上了-g
第二局保证了具体的Make语句被显示出来,我们可以实际检查编译选项是否正常。

2. 运行语句:
2.1: 运行ros master
$roscore
2.2: 运行想要Debug的程序:
进入catkin_ws/devel/lib/Package_Name. 可以看到可执行文件。
$gdb ./example2_sam

3. DEBUG :
(gdb) l
可以看到代码。

(gdb) b 20
在20行加入Bread点。

(gdb) r
开始运行。 只有此时,Node才会被建立起来。


3. launch文件启用GDB:



4. CORE文件相关:




5. 调试信息
在调试程序时,可以通过信息记录显示程序的运行状态。但需要这样的信息记录的行为不会影响软件的运行效率,不会和正常的输出混淆。
ROS中,就有满足以上要求,内置于log4cxx之上的API。
与Kernel中printk类似,ROS的调试信息也包含不同的信息级别:

5.1:调试信息宏:
ROS_DEBUG()
ROS_INFO()
ROS_WARN()
ROS_ERROR()
ROS_FATAL()

ROS_DEBUG()和ROS_INFO()通常显示在stdout上。其它的则显示在stderr上。且颜色也不同。

5.2: 信息级别
默认情况下,系统会显示INFO和更高级别的调试信息。
想要调节这个级别,可以在编译时设定,也可以在在执行前使用配制文件调整,也可以在运行中,使用工具动态调节。

方法一:
在代码中调节:
在ROS::init()后,加入代码

方法二:
在CMakeLists.txt 中,添加宏记录去除器。

方法三:








 

Viewing all articles
Browse latest Browse all 158

Trending Articles