【内存泄漏】- 2. 使用cppcheck+Jenkins检测c、c++内存泄漏
一、 什么是程序静态分析? 程序静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。 二、 程序静态分析是怎样检测内存泄漏的?静态分析工具相比编译器,对代码进行了更加严格的检查,像数组越界访问、内存泄漏、使用不当的类型转换等问题,都可以通过静态分析工具检...
一、 什么是程序静态分析?
程序静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
二、 程序静态分析是怎样检测内存泄漏的?
静态分析工具相比编译器,对代码进行了更加严格的检查,像数组越界访问、内存泄漏、使用不当的类型转换等问题,都可以通过静态分析工具检查出来,我们甚至可以在分析工具的分析标准里定义代码的编写规范,在检测到不符合编写规范的代码时抛出告警,这些功能都是编译器没有的。
静态分析通常是寻找内存分配位置以及相应的释放点的配对,即:验证是否所有的路径都会存在正确的内存释放,一旦某条路径中未含有内存释放操作,静态分析工具就会记录并输出疑似内存泄漏的信息。
三、为什么使用cppcheck检测工具?
cppcheck是一个命令行工具,它试图检测c/c++编译器没有看到的bug。它可以检查非标准的代码,包括各种编译器扩展,内联汇编代码等等。它的内部预处理器可以处理包括宏和一些预处理器命令。虽然Cppcheck是高度可配置的,但是你只需要在这个命令后加上源码的路径就可以使用它。
Cppcheck静态分析工具相对于其他工具,它可以在linux下快速安装,并且它的特点是,确保不会误报。结合我们xavier平台中c源码实际情况,使用cppcheck工具可以对每个c源码文件进行检测,避免在开发过程中因为代码编写考虑不周全导致内存泄漏的问题。
下图说明了静态程序分析在进行项目编码过程中所处的位置:
四、如何使用cppcheck检查c内存泄露
Linux下安装cppcehck:
sudo apt-get install cppcheck
以下例子演示当最后一个指针引用丢失的时候,其指向的空间尚未释放的情况:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
/* code */
double a;
int * p;
int b;
int c[2];
b = 1;
a = b; //使用不当的类型转换
p = (int *)malloc(10); //申请的内存未释放
c[2] = 1; //数组访问越界
printf("%d\n", b);
return 0;
}
cppcheck --enable=all --inconclusive --std=posix test_c_memory_leakage.c
五、如何使用cppcheck检测工具将结果图像化的显示
尽管cppcheck是个命令行工具,在Jenkins中已经有cppcheck的插件,所以它可以配合jenkins使用。Jenkins可以对cppcheck检测后的结果进行处理,并且可以将结果图形化的显示,效果图如下图所示。
附链接:http://blog.csdn.net/jiang1986829/article/details/51328830
【内存泄漏】- 3. 使用splint检测c、c++内存泄漏
【内存泄漏】- 4. 使用python的gc+pyrasite模块检测python内存泄漏
【内存泄漏】- 5. 使用Valgrind工具检测Python内存泄漏
更多推荐
所有评论(0)