[Linux]用Clang实现代码静态分析

1.按转Clang

sudo apt-get install Clang

2.编写测试程序  memleak.c

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *mem;
    mem=malloc(sizeof(int));
    if(mem) return 1;
    *mem=0xdeadbeaf;
    free(mem);
    return 0;
}

3. 运行代码静态检查

scan-build -o memleak gcc memleak.c -o m

结果如下:

memleak.c:9:5: warning: Dereference of null pointer (loaded from variable ‘mem‘)

*mem=0xdeadbeaf;

^~~~

1 warning generated.

scan-build: 1 bugs found.

4.在当前目录下会生存一个 memleak文件夹,内有一个以日期命名的文件夹,用浏览器打开该文件夹内的 index.html 查看错误bug报告

5.修改 memleak.c

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int *mem;
    mem=malloc(sizeof(int));
    if(mem==NULL) return 1;
    *mem=0xdeadbeaf;
    free(mem);
    return 0;
}

6.再次运行 scan-build -o memleak gcc memleak.c -o m

7. 此时bug消失

8. 下载开源 cgdb http://cgdb.github.io/

9.切换到 cgdb 所在目录,运行 scan-build -o cgdb-scan ./configure --prefix=$PWD/build

10. 运行 scan-build -o cgdb-scan make

11.用浏览器打开当前目录下 cgdb-scan 下的 index.html 查看 bug 报告

参考文献

http://events.linuxfoundation.org/images/stories/pdf/lcjp2012_matsumotoh.pdf

http://clang-analyzer.llvm.org/scan-build.html

http://www.hackhowtofaq.com/blog/static-analysis-with-llvm-clang-in-linux/

[Linux]用Clang实现代码静态分析,布布扣,bubuko.com

时间: 2024-08-06 03:42:28

[Linux]用Clang实现代码静态分析的相关文章

Understand:高效代码静态分析神器详解(转)

之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source insight软件还强大的代码静态分析工具,堪称神器–Understand.这款软件具有强大的代码静态分析功能,并且可以绘制各种流程图,不幸的是没有发现Windows版本,只看到mac版和Linux版本,因此用Windows系统的朋友抱歉了. 因为工作太忙,还没有时间详细的研究一下使用方法,只是简单的了解

代码静态分析工具的误报原因分析

1. 引言 本篇文章分析了代码静态分析的基本原理以产生误报的根本原因,并介绍了形式化方法在LDRA工具套件中的应用情况.文章从实际工程应用的角度阐述了这些形式化方法的局限性,在参考文献1<Formal Methods Implemented in the LDRA Tool Suite>中我们详细描述了形式化方法是如何在LDRA工具套件中被实现的,了解到实现这些形式化方法的算法都被内化在了LDRA工具套件的静态分析组件之中,使用工具的用户不需要具备这方面的知识.在工具中所有被分析的源代码文件,

代码静态分析工具PC-LINT安装配置

代码静态分析工具PC-LINT安装配置--step by step                             作者:ehui928                             2006-5-20 PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器.它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误. C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来

linux 命令c语言代码实现

自己学习<APUE>时写的linux下一些命令(大概40个左右)实现,仅当学习使用,这些命令包括cat cp echo head ls paste rmdir tail umask who chattr cut expand join mkdir pwd sed tee uniq chgrp date find last mkfifo reboot sort wc chmod df ln mv rename split touch which chown du grep lsattr od r

C/C++代码静态分析插件 SourceInsight_Scan

sourceinsight-scan 是一款集成在 SourceInsight 中的c/c++代码静态分析插件,集成了cppcheck,coverity,pclint等业界优秀的静态分析工具的优点. 旨在帮助开发人员,在IDE中快速发现编译器无法发现的非语法错误,降低修复成本. 无需编译,平均扫描速度高达10W行/分钟,快速帮您发现潜在的质量风险,包括空指针,越界,内存泄漏及潜在的逻辑错误,平均准确率高达80%. 支持个性化定制需求,包括规则配置,误报屏蔽,路径屏蔽,配置自定义判空宏等. 参考链

转载: linux下创建svn代码库

linux下创建svn代码库 1.安装svn客户端 2.创建svn代码库 1.安装svn客户端 1.1.使用命令安装 1)CentOS $ yum install subversion 2)ubuntu sudo apt-get install subversion 1.2.源码安装 http://www.cnblogs.com/fengbohello/p/4142810.html 2.开启svn服务进程 2.1.我的习惯是把代码仓库放在/opt/svn目录下,所以先创建目录/opt/svn $

Linux下编译C代码,出现tan函数报错的情况

undefined reference to `tan' 但是已经包含了头文件 <math.h>了,可还是报错,说是找不到tan 这个问题的原因不是很清楚, 但是网上给出的方案,就是编译的时候 加上参数 -lm 有说l表示Lib ,m表示 math.h  , ****************************************************************************************************** 以下是一些说明 使用math.h

代码静态分析工具

今天在haskell群里请教问题时,某巨说我需要hlint,然而我并不知道hlint是什么鬼. (haskell linter) 也就是haskell的代码静态分析工具.并不会对代码进行编译,只是会给出一些tips.可以帮助代码变得 strong,safe and so on. 然后出于好奇,便找了一个cpplinter, google用python写的一个工具.可以对c++进行静态分析. 这边有篇不错的文章可以借鉴.传送门

Linux下C/C++代码调用PHP代码

Linux下C/C++代码可以通过popen系统函数调用PHP代码并通过fgets函数获取PHP代码echo输出的字符串. //main.c char str[1024] = {0}; char * cmd = "php /src/test/c.php 1234"; FILE * stream = NULL; if ((stream = popen(cmd, "r")) == NULL){//通过popen执行PHP代码 return ""; }