代码检查工具文档.docx

代码检查工具文档.docx

ID:57217753

大小:933.59 KB

页数:16页

时间:2020-08-06

代码检查工具文档.docx_第1页
代码检查工具文档.docx_第2页
代码检查工具文档.docx_第3页
代码检查工具文档.docx_第4页
代码检查工具文档.docx_第5页
资源描述:

《代码检查工具文档.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、代码检查工具一.内存泄漏的发生方式1).常发性2).偶发性3).一次性4).隐式二.代码检查的方式代码检查的方式分为静态代码检查(Staticprogramanalysis)和动态代码检查(Dynamicprogramanalysis)。三.动态代码检查——Valgrind简单用法1).valgrind包含的工具①.memcheck最常用的工具,也是valgrind默认的工具。用来检测程序中出现的内存问题,所有对内存的读写都会被检测到。一切对malloc()/free()、new/delete的调用都会被捕获,所

2、以它能检测以下问题:Ø对未初始化内存的使用Ø读/写释放后的内存块Ø读/写超出malloc分配的内存块Ø读/写不适当的栈中内存块Ø内存泄漏,指向一块内存的指针永远丢失Ø不正确的malloc/free或new/delete匹配ØMemcpy()相关函数中的dst和src指针重叠。②.callgrind,它不需要在编译源码时附加特殊选项,但推荐加上调试选项,callgrind搜集程序运行时的一些数据,建立函数调用关系图,还可以有选择的进行cache模拟,在运行结束时,它会把分析数据写入一个文件。简而言之,它主要用来检查

3、程序中函数调用过程中出现的问题。③.cachegrind,它模拟CPU中的一级缓存和二级缓存,能够精确的指出程序中cache的丢失和命中。如果需要,它还能为我们提供cache丢失的次数,内存引用次数,以及每行代码、每个函数、每个模块、整个程序产生的指令数。对优化程序有很大帮助。④.helgrind,它主要用来检查多线程程序中出现的竞争问题。Helgrind寻找内存中被多个线程访问而又没有一贯加锁的区域,这些区域往往是线程之间失去同步的地方。而且会导致难以发掘的错误。⑤.massif,堆栈分析器,它能测量程序在堆栈

4、中使用了多少内存,告诉我们堆块、堆管理块和栈的大小。它能帮助我们减少内存的使用,在带有虚拟内存的现代系统中,它还能加速我们的程序运行,减少程序停留在交换区中的几率。⑥.extension。可以利用core提供的功能,自己编写特定的内存调试工具。2).valgrind的使用Valgrind[valgrind-options]your-prog[your-prog-options]选项作用-h/--help显示帮助信息-version显示valgrind内核版本-q/--quiet安静的运行,只打印错误信息-v/--

5、verbose打印更详细的信息--tool=[default:memcheck]运行valgrind中的工具,默认memcheck.--leak-check=no

6、summary

7、full要求对leak列出详细信息[default:summary]--log-file=Path+日志信息文件3).使用示例①.未释放内存,数组越界.sample.c#includevoidfun(){int*p=(int*)malloc(10*sizeof(int));p[10]=0;}intmain

8、(intargc,char*argv[]){fun();return0;}1.编译:gcc–gsample.c–osample2.使用valgrind:valgrind--leak-check=full./sample输出信心分析如下图所示:示例程序中有两个问题,一是fun()函数中动态申请的堆内存没有释放。二是对堆内存的访问越界。②.使用未初始化的内存。badloop.c#includeintmain(void){inta[5];inti,s;a[0]=a[1]=a[2]=a[3]=a[4]=

9、0;for(i=0;i<5;i++)s+=a[i];if(s==168)printf("sumis%d",s);return0;}1.编译:gcc–gbadloop.c–obadloop2.使用valgrind:valgrind--leak-check=full./badloop输出信心分析如下图所示:③.内存读写越界。badacc.c#include#includeintmain(void){intlen=4,i;int*pt=(int*)malloc(len*size

10、of(int));int*p=pt;for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。