一种IROS中内存释放冲突检测方法与流程

文档序号:37794638发布日期:2024-04-30 17:04阅读:5来源:国知局
一种IROS中内存释放冲突检测方法与流程

本发明涉及智能机器人操作系统领域,具体涉及一种iros中内存释放冲突检测方法。


背景技术:

1、iros(intelligent robot operating system,下文简称“iros”)是智能机器人操作系统的简称,具备开源ros(robot operating system,简称“ros”)类似的功能,替代了ros的内核,提供了兼容ros的接口,解决了ros可靠性、性能、安全等相关的问题,并增加了新的功能,支持云化机器人开发、支持云边端通信、支持多机器人协作等。

2、iros提供消息、服务、参数等基础通信功能,并提供了基本兼容ros的c++ api。在基于iros和c/c++进行应用开发时,内存的申请和释放是经常用到的操作,正常情况下内存的申请和释放是成对的操作,申请的内存不用时需要释放,否则会造成内存泄漏,内存泄漏会系统内存不足,应用无法继续运行;同样如果同一块内存多次释放(内存释放冲突),则会造成应用崩溃,应用一样无法继续运行。基于c/c++开发的灵活性,在复杂的机器人应用逻辑中,对内存的申请和释放管理变得非常困难,一些开发工具可以帮助查找内存泄漏问题,但对于内存重复释放造成的系统崩溃还没有很好的解决办法。在用gdb等c/c++调试工具调测内存释放冲突问题时,经常报告的却是系统内存申请问题,误导开发者,因此内存释放冲突问题非常棘手。


技术实现思路

1、本发明为了克服以上技术的不足,提供了一种iros中内存释放冲突检测方法,可以检测出内存释放是否有冲突及冲突的可能位置。

2、本发明克服其技术问题所采用的技术方案是:

3、一种iros中内存释放冲突检测方法,包括如下步骤:

4、a)采用新的内存申请api函数malloc_test替换函数malloc,采用新的内存申请api函数free_test替换函数free;

5、b)在函数malloc_test中调用系统原来的函数malloc,将函数malloc返回的内存地址值追加写入到malloc.txt文件中,每个地址值是一行,函数malloc_test最后返回函数malloc申请的内存地址;

6、c)在函数free_test中将释放的内存地址的值追加写入到free.txt文件中,每个地址值是一行,函数free_test最后调用系统原来的函数free真正释放内存;

7、d)在iros应用中使用函数malloc_test替换函数malloc,使用函数free_test替换函数free,当iros应用退出后,对malloc.txt文件内容进行排序形成新的文件malloc.sort,对free.txt文件内容进行排序形成新的文件free.sort;

8、e)利用diff工具比较文件malloc.sort和文件free.sort,如果两者一致,则判定该iros应用无内存释放冲突问题,也无内存泄露问题,如果文件free.sort的内容多于文件malloc.sort且文件free.sort中有重复的记录,则判定该iros应用有内存释放冲突问题,如果文件free.sort中有重复的记录,则判定该iros应用有内存释放冲突问题,如果文件malloc.sort的内容多于文件free.sort的内容,则转为人工判定。

9、进一步的,步骤a)中函数malloc_test采用与函数malloc一样的函数原型,函数free_test采用与函数free一样的函数原型。

10、进一步的,步骤b)中在函数malloc_test追加写入内存地址值时,采用一把函数内部静态锁,该函数内部静态锁使文件写前加锁,文件写后解锁。

11、进一步的,步骤c)中在函数free_test追加写入待释放内存地址值时,采用一把函数内部静态锁,该函数内部静态锁使文件写前加锁,文件写后解锁。

12、进一步的,还包括在步骤e)之后执行如下步骤:在函数free_test中添加宏_file_和_line_调用,将宏_file_和_line_调用值及待释放的内存地址值输出到文件free.debug中,根据文件free.sort重复的内存地址值记录和文件free.debug中的信息,将相同地址值记录的宏_file_和_line_调用位置确定为内存释放冲突的位置。

13、本发明的有益效果是:用新的内存申请和释放api替换glibc中的malloc和free,如用malloc_test替换malloc,用free_test替换free,malloc_test在执行原malloc的功能外,还对申请成功的内存地址进行记录,free_test在执行原free的功能外,还对释放的内存地址进行记录。对malloc_test记录的内存地址列表与free_test释放的内存地址列表进行比对,就能找出内存冲突是否冲突,可以检测出内存释放是否有冲突及冲突的可能位置,有助于iros应用开发人员进行内存问题调测,解决iros应用开发时内存释放冲突造成应用崩溃且难以查找的问题,对检测内存泄露也能达到较好的效果。



技术特征:

1.一种iros中内存释放冲突检测方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的iros中内存释放冲突检测方法,其特征在于:步骤a)中函数malloc_test采用与函数malloc一样的函数原型,函数free_test采用与函数free一样的函数原型。

3.根据权利要求1所述的iros中内存释放冲突检测方法,其特征在于:步骤b)中在函数malloc_test追加写入内存地址值时,采用一把函数内部静态锁,该函数内部静态锁使文件写前加锁,文件写后解锁。

4.根据权利要求1所述的iros中内存释放冲突检测方法,其特征在于:步骤c)中在函数free_test追加写入待释放内存地址值时,采用一把函数内部静态锁,该函数内部静态锁使文件写前加锁,文件写后解锁。

5.根据权利要求1所述的iros中内存释放冲突检测方法,其特征在于,还包括在步骤e)之后执行如下步骤:在函数free_test中添加宏_file_和_line_调用,将宏_file_和_line_调用值及待释放的内存地址值输出到文件free.debug中,根据文件free.sort重复的内存地址值记录和文件free.debug中的信息,将相同地址值记录的宏_file_和_line_调用位置确定为内存释放冲突的位置。


技术总结
一种IROS中内存释放冲突检测方法,用新的内存申请和释放API替换glibc中的malloc和free,如用malloc_test替换malloc,用free_test替换free,malloc_test在执行原malloc的功能外,还对申请成功的内存地址进行记录,free_test在执行原free的功能外,还对释放的内存地址进行记录。对malloc_test记录的内存地址列表与free_test释放的内存地址列表进行比对,就能找出内存冲突是否冲突,可以检测出内存释放是否有冲突及冲突的可能位置,有助于IROS应用开发人员进行内存问题调测,解决IROS应用开发时内存释放冲突造成应用崩溃且难以查找的问题,对检测内存泄露也能达到较好的效果。

技术研发人员:李朝铭
受保护的技术使用者:山东新一代信息产业技术研究院有限公司
技术研发日:
技术公布日:2024/4/29
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1