1. 在线播包调试
这是最简单的一种方式,因为一般情况下程序就是在线播包运行的,在线播包调试也就顺理成章。
但这种方法有严重的缺陷:调试过程很难与真实过程相同,且两次调试的运行过程可能完全不一样。这主要是因为当程序卡在一个断点处时,程序不再运行,但播包还在继续。手工暂停播包的方法掘旦也并不能精确控制时间,所以调试过程中获取的数据的时间间隔是比较随机的。
2. 离线读包调试
这种方式有两个优点,一是快速运行,程序以很快的速度到达调试点;二是问题完全复现。
但这种方法不适用于多线程调试。
3. 使用模拟器
设计一个模咐源拟器,使用离线读包的方式获取数据,但在传递给程序时却要模拟在线的方式。也就是说虽然本质上是离线读包,但并不是每读到一个数据就直接传递给程序,而是等待一段时间再传递,等待的时间就是ROS时间衡散态间隔。
ROS中用到第三方库,在编译第三方库的时候樱余,加上 -g 选项,以供调用该库时调试。在编译ROS包的时候,使用嫌颂念如下命令编译:
catkin_make -DCMAKE_BUILD_TYPE=Debug
GDB启动应用
rosrun --prefix 'gdb -ex run --args' package node
之后就可以正常使用GDB命令来调试了,因为第三方库编译加了 -g 选项,所以可以进入调用库中的函芹困数进行调试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)