参考
《ROS机器人程序开发》
《嵌入式Linux开发基础知识》
roslaunch wiki
前言
- 这是必须学习的技能,但是不需要精通,应该利用更高层的工具
- 在ROS项目开发过程中应用,在使用roslaunch过程中应用gdb
- 在CLion,VSCode使用过程中应用调试功能
gdb学习
是一个用来调试C/C++程序的强力调试器,常用功能有:监视程序中变量的值;设置断点;单步执行
- 为了使gdb正常工作,你必须使你的程序在编译时包含调试信息。
gcc -g
调试信息包括你程序里的每一个变量的类型和在可执行文件里的地址映射以及源代码的行号。 - 你可以使用gdb调试一个可执行文件,也可以用gdb检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。更多请参考
gdb -h
- 命令支持tab补齐特性
使用要点
gdb
打开调试器file FILE
装载指定可执行文件break NUM
在指定的行上设置断点bt
显示所有的调用栈帧,显示函数的调用顺序clear FILENAME:NUM
删除特定源文件行上的断点next
在不单步执行进入其他函数的情况下,向前执行一行源代码continue
继续执行display EXPR
每次程序停止后显示表达式的值,表达式由程序定义的变量组成print EXPR
显示表达式的值info files
显示被调试文件的详细信息info func
显示所有函数名称info local
显示当函数中的局部变量信息info prog
显示被调试程序的执行状态info var
显示所有的全局和静态变量名称kill
终止正在被调试的程序list
显示源代码段make
在不退出gdb的情况下运行make工具
ROS node debug with gdb(使用gdb调试ROS节点)
- 从调试任意C/C++可执行文件的标准方法开始
roscore
gdb bin/example
r
- ros节点启动时调用gdb调试器
需要在launch文件中添加launch-prefix="xterm-egdb--args"
,该语句意思是:加载节点并等待运行。注意,因为是在xterm中创建gdb绘画,所以还有一个调试窗口。 launch-prefix
其实是一个前置启动工具,我们同样可以使用launch-prefix="valgrind"
来在启动节点之前启动valgrind工具检测内存泄露,并执行性能分析。valgrind.org- 更多请见
roslaunch 学习和调试
- launch文件:功能包名传递给pkg属性,节点名传递给type属性,由于同一个节点可以运行多个实例,因此需要给每个实例一个节点名以作区分,即name属性,最好将这些属性配置输出到屏幕,这样就会在启动节点的shell窗口中输出相应调试信息,output=screen。