3

SLAM从入门到精通(代码调试)

 7 months ago
source link: https://blog.csdn.net/feixiaoxing/article/details/133827504
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面的文章,我们学习了如何仿真、如何编译代码、如何写代码。但是如何调试这些代码,涉及的不是很多。因为如果要把ros真的用起来,真正服务于自己的项目当中去,代码调试肯定是少不了的。不管是添加新的功能、还是对性能进行优化,都少不了代码调试的部分。鉴于目前大部分ros都是运行在linux环境下面,所以我们一般都会选择gdb来进行代码调试。

        为了说明如何用gdb调试,我们下面来说一下具体的流程。

dc340e7790fd4eb19aee8444b1aa5085.png

1、打开roscore

        这是基本步骤,没有roscore,其他的node都没有办法正常运行。

2、启动测试程序

        这里测试程序选择一个以前编译过的代码,vel_node。直接输入rosrun beginner_tutorials vel_node即可。

3、查看vel_node的进程id号

        既然roscore和node都已经运行起来了,那么这个时候需要知道vel_node究竟运行在那个process上面。这一步可以通过ps aux | grep vel_node来解决。

4、直接使用gdb进行bind操作

        bind的操作过程中,有一步时需要注意的。那就是bind的时候一定要添加sudo命令,不然bind不上。接下来如果我们能看到下面这些打印,基本上说明gdb已经成功bind上process 2163了。这个2163就是刚刚用ps aux | grep vel_node命令查找出来的process id。



newCodeMoreWhite.png

5、第一个调试动作bt

        后面的调试就是正常的gdb调试了,输入对应的gdb调试指令就可以了。不过我们用的比较多的还是bt,这里输入bt查看一下,

        从打印来看应该问题不大了。有的同学也许会说,如何从main一开始执行的时候就能断住程序呢。方法很简单,就是在main.c入口处添加这样的debug代码就可以,

        这样等程序被gdb捕获之后,通过print debug=1的方法就可以继续调试main.c后面的代码了。大家可以自己多多练习测试下。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK