1、检查点

  1、自动变量检查: 返回自动变量(局部变量)指针;

  2、越界检查:数组越界返回自动变量(局部变量)指针;

  3、类检查:构造函数初始化;

  4、内存泄露检查;

   5、空指针检查;

  6、废弃函数检查;

  7、其他。

2、Cppcheck 架构分析

  2.1 总体类图

3、检查点cppcheck系统C++实现类

  参数分析&外部输入

  内部抽象classSetings

class Settings

{

  …

  std::string _append;

  std::string userDefines;

  std::list<std::string> _includePaths;

  std::list<Rule> rules;

  …

}

  字符交互模式
  CmdLineParser parser(&_settings);

4、Cppcheck总过程

4.1 预处理

  预处理处理由Preprocessor类实现

  执行Class Preprocessor::preprocess()

  预处理阶段主要处理:

  • 去多余空格
  • 删除汇编代码
  • 处理#Include及嵌套
  • 统一预处理语句(例:#if define=> #ifdef)
  • 提取预处理配置设置(configuration)
  • 替换宏定义

4.2 Tokenize

  解析代码成符号,由 class Tokenizer实现,实现接口 class Tokenizer::tokenize()

  • 符号:+-*/;…等;
  • 变量名;
  • 函数名。

4.3 Simplify

  目的:简化复杂代码,   统一化

  由 class Tokenizer实现,实现接口 class Tokenizer::simplifyTokenList()

  Simplify规则:对变量;对条件循环语句if 、for、while

5、Cppcheck 核心类

  核心函数check()

  处理入口,在此函数对输入代码进行初步分析处理,最后将代码传递给 CheckFile()。

  核心函数CheckFile()

  函数功能是分析一个代码文件, CheckFile()会将代码流做进一步的分析,做tokenize,simplify,处理后分析代码,报告错误。

  Class cppcheck::check()函数  &class cppcheck:: CheckFile()函数的实现

  Cppcheck 检查实现类check

Class check

protected:

    const std::string _name;

    const Tokenizer * const _tokenizer;

    const Settings * const _settings;

    ErrorLogger * const _errorLogger;

virtual void runChecks(****){ }                              //不是所有check子类都会实现

virtual void runSimplifiedChecks(***) = ;            //所有check子类都会实现

void reportError()                                     //报告误差,所有check子类都会用到

virtual void getErrorMessages(****) = ;          //所有check子类都会实现,最终都会调用reportError()

  Void runChecks()

  主要是检查经过tokenize,但未经过simplify的代码流

  Void runSimplifiedChecks()

  主要是检查经过tokenize,但未经过simplify的代码流

  用户扩展接口

CheckOther : public Check

……

virtual void runChecks(****){ }                     //实现

virtual void runSimplifiedChecks(***) = ;   //实现

  添加检查函数方法:

void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger)

    {

        CheckOther checkOther(tokenizer, settings, errorLogger);

        // Coding style checks

        checkOther.warningOldStylePointerCast();

        checkOther.checkUnsignedDivision();

         checkOther.addcheck();

        …
}

Cppcheck代码分析上的更多相关文章

  1. Cppcheck代码分析(2)

    功能 解析函数中的可能的代码执行流 函数实际执行中只会执行代码流中的一条流 分析: 分支语句 if-else ,switch-case 循环语句 while, do-while ,for 代码流举例 ...

  2. Cppcheck代码分析(1)

    一.检查点 1.自动变量检查: 返回自动变量(局部变量)指针 2.越界检查: 数组越界返回自动变量(局部变量)指针 3.类检查: 构造函数初始化 4.内存泄露检查: 5.空指针检查: 6.废弃函数检查 ...

  3. Cppcheck代码分析下

    1.流解析 解析函数中的可能的代码执行流, 函数实际执行中只会执行代码流中的一条流 分析: 分支语句 if-else ,switch-case         循环语句 while, do-while ...

  4. Cppcheck 1.54 C/C++静态代码分析工具

    Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型.   官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级4 2.使用GC ...

  5. C++静态代码分析工具对比cppCheck与PreFast

    具体内容参看文件<CppCheck和PreFast对Cplusplus代码静态分析测试.zip> C++测试源代码main.cpp #define NULL 0 #include < ...

  6. Eclipse插件(导出UML图,打开文件资源管理器插件,静态代码分析工具PMD,在eclipse上安装插件)

    目录 能够导出UML图的Eclipse插件 打开文件资源管理器插件 Java静态代码分析工具PMD 如何在eclipse上安装插件 JProfiler性能分析工具 从更新站点安装EclEmma 能够导 ...

  7. C++静态代码分析工具推荐——PVS-Studio

    长假归来,最近一直没更新,节前本来就想写这篇了,一直到今天才有时间. 关于静态代码分析在维基百科上可以查到很详细的介绍:https://en.wikipedia.org/wiki/List_of_to ...

  8. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)

    Asp.net 5的依赖注入注入系列可以参考链接: [Asp.net 5] DependencyInjection项目代码分析-目录 我们在之前讲微软的实现时,对于OpenIEnumerableSer ...

  9. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

随机推荐

  1. 软件工程课堂作业(五)——终极版随机产生四则运算题目(C++)

    一.升级要求:让程序能接受用户输入答案,并判定对错.最后给出总共对/错的数量. 二.设计思想: 1.首先输入答案并判断对错.我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案.每输出一道 ...

  2. 修改IP的批处理

    昨天遇到一个客户,说是抢火车票来着,用了3个公网IP,要求在抢票前15分钟换次IP(看我这毛病,废话多了,正题) 系统是2003 32位的 因为自己不懂脚本,网上找了个修改了下,就有了下面的脚本: 首 ...

  3. cacti 添加mysql 监控 (远程服务器)

    监控主机 192.168.24.69 ,以下用A表示 被监控主机 192.168.24.79,以下用B标识   记得在A服务器的cacti中导入监控mysql的templates文件   1.在B上安 ...

  4. table与div互相嵌套注意

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. 封装字符串的Format操作

    相信即使再讨厌MFC的朋友也不会把厌恶牵扯到CString类上,而且CString现在也提升为ATL和MFC的共享类.用CString类,当然不能忘记它的Format方法,其用于格式化字符串.示例操作 ...

  6. AndroidStudio3.0 注解报错Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor.

    把Androidstudio2.2的项目放到3.0里面去了,然后开始报错了. 体验最新版AndroidStudio3.0 Canary 8的时候,发现之前项目的butter knife报错,用到注解的 ...

  7. 三节点搭建openstack-Mitaka版本

    前言: 现在的云计算平台已经非常火,也非常的稳定了.像阿里云平台,百度云平台等等,今天咱们基于openstack来搭建一个云平台 注意: 本次平台搭建为三节点搭建(没有外部存储节点,所有存储为本地存储 ...

  8. [SCOI2007]组队 差分

    题面:[SCOI2007]组队 题解: 一开始固定H然后找性质找了很久也没有找到任何有用的东西...... 然后大佬告诉我一个神奇的方法... 首先我们化一波式子: 设$H$表示高度的最小值,$V$表 ...

  9. UOJ228:基础数据结构练习题——题解

    http://uoj.ac/problem/228 参考:https://www.cnblogs.com/ljh2000-jump/p/6357583.html 考虑当整个区间的最大值开方==最小值开 ...

  10. BZOJ3437 小P的牧场 【斜率优化dp】

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1502  Solved: 836 [Submit][Status][Disc ...