【内存泄漏】- 2. 使用cppcheck+Jenkins检测c、c++内存泄漏

版权声明:欢迎交流 https://blog.csdn.net/sishuihuahua/article/details/85040618

一、 什么是程序静态分析?

        程序静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。

 

二、 程序静态分析是怎样检测内存泄漏的?

静态分析工具相比编译器,对代码进行了更加严格的检查,像数组越界访问、内存泄漏、使用不当的类型转换等问题,都可以通过静态分析工具检查出来,我们甚至可以在分析工具的分析标准里定义代码的编写规范,在检测到不符合编写规范的代码时抛出告警,这些功能都是编译器没有的。

静态分析通常是寻找内存分配位置以及相应的释放点的配对,即:验证是否所有的路径都会存在正确的内存释放,一旦某条路径中未含有内存释放操作,静态分析工具就会记录并输出疑似内存泄漏的信息。

 

三、为什么使用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

 

猜你喜欢

转载自blog.csdn.net/sishuihuahua/article/details/85040618
今日推荐