这期内容当中小编将会给大家带来有关如何解决Linux下c++程序内存泄漏检测代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
天峻网站建设公司创新互联建站,天峻网站设计制作,有大型网站制作公司丰富经验。已为天峻成百上千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的天峻做网站的公司定做!
Linux下对于程序内存泄漏检测的方法很多,最常用的的莫过于使用valgrind工具。但是valgrind相当于让程序在虚拟机中运行,会带 来较大的系统资源开销,还会对程序的运行效率产生较大影响,对于那种资源占用大的程序,如果需要长时间运行才能暴露的泄漏问题,它就显得不太好用。
linux下的c++程序中自己实现一个轻量级的泄漏检测代码其实是比较方便的,下面我就给出一个简单的范例,并作简单的说明。当然,我们还是应该提倡使用共享指针,用共享指针自动管理内存可以避免内存泄漏这样的不必要的麻烦。
基本原理:
利用glibc提供的__malloc_hook, __free_hook系列函数对内存分配是否做监控;(详见glibc的官方文档)
利用backtrace函数获取函数调用栈,并记录;
利用backtrace_symbols对调用栈对应的函数做解析;
进一步处理:
使用abi::__cxa_demangle把函数名解析为源代码风格;
使用addr2line解析出函数调用栈对应的代码行;
对于动态库(.so)中的地址解析,需要先在/proc//maps文件中找到动态库映射的基地址,才能做解析。
注意:
编译连接参数中使用-g -rdynamic
以上每步具体实现的代码可能都没有达到***,甚至可能是笨办法,如果有更好的实现方案请直接替换,也欢迎赐教。
示例代码:
leakmom.cpp
/* Prototypes for __malloc_hook, __free_hook */ #include #include
上述就是小编为大家分享的如何解决Linux下c++程序内存泄漏检测代码了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
分享标题:Linux下c++程序内存泄漏检测代码的示例分析
网站地址:
http://ybzwz.com/article/jhsohg.html