Cppcheck代码分析(1)
一、检查点
1、自动变量检查:
返回自动变量(局部变量)指针
2、越界检查:
数组越界返回自动变量(局部变量)指针
3、类检查:
构造函数初始化
4、内存泄露检查:
5、空指针检查:
6、废弃函数检查
7、其他:
二、Cppcheck 架构分析
总体

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

参数分析
外部输入
内部抽象classSetings
class Settings
{
…
std::string _append;
std::string userDefines;
std::list<std::string> _includePaths;
std::list<Rule> rules;
…
}
字符交互模式
CmdLineParser parser(&_settings);
四、Cppcheck总过程
预处理
预处理处理由Preprocessor类实现
执行Class Preprocessor::preprocess()
预处理阶段主要处理:
去多余空格
删除汇编代码
处理#Include及嵌套
统一预处理语句(例:#if define=> #ifdef)
提取预处理配置设置(configuration)
替换宏定义
Tokenize
解析代码成符号
由 class Tokenizer实现
实现接口 class Tokenizer::tokenize()
符号:+-*/;…等
变量名
函数名
Simplify
目的:
简化复杂代码
统一化
由 class Tokenizer实现
实现接口 class Tokenizer::simplifyTokenList()
Simplify规则
对变量
对条件循环语句if 、for、while
五、Cppcheck 核心类class cppcheck
核心函数check()
处理入口,在此函数对输入代码进行初步分析处理,最后将代码传递给 CheckFile().
核心函数CheckFile()
函数功能是分析一个代码文件, CheckFile()会将代码流做进一步的分析,做tokenize,simplify,处理后分析代码,报告错误
Class cppcheck::check()函数 &class cppcheck:: CheckFile()函数的实现

Cppcheck 检查实现类check
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(***) = 0; //所有check子类都会实现
void reportError() //报告误差,所有check子类都会用到
virtual void getErrorMessages(****) = 0; //所有check子类都会实现,最终都会调用reportError()
Void runChecks()
主要是检查经过tokenize,但未经过simplify的代码流
Void runSimplifiedChecks()
主要是检查经过tokenize,但未经过simplify的代码流
用户扩展接口
CheckOther : public Check
……
virtual void runChecks(****){ } //实现
virtual void runSimplifiedChecks(***) = 0; //实现
添加检查函数方法:
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代码分析上
1.检查点 1.自动变量检查: 返回自动变量(局部变量)指针: 2.越界检查:数组越界返回自动变量(局部变量)指针: 3.类检查:构造函数初始化: 4.内存泄露检查: 5.空指针检查: 6.废弃函数 ...
- Cppcheck代码分析下
1.流解析 解析函数中的可能的代码执行流, 函数实际执行中只会执行代码流中的一条流 分析: 分支语句 if-else ,switch-case 循环语句 while, do-while ...
- Cppcheck代码分析(2)
功能 解析函数中的可能的代码执行流 函数实际执行中只会执行代码流中的一条流 分析: 分支语句 if-else ,switch-case 循环语句 while, do-while ,for 代码流举例 ...
- C++静态代码分析工具对比cppCheck与PreFast
具体内容参看文件<CppCheck和PreFast对Cplusplus代码静态分析测试.zip> C++测试源代码main.cpp #define NULL 0 #include < ...
- Cppcheck 1.54 C/C++静态代码分析工具
Cppcheck是一个C/C++代码分析工具,只检测那些编译器通常无法检测到的bug类型. 官方上建议让编译器提供尽量多的警告提示:1.使用Visual C++的话,应使用警告等级4 2.使用GC ...
- C++静态代码分析工具推荐——PVS-Studio
长假归来,最近一直没更新,节前本来就想写这篇了,一直到今天才有时间. 关于静态代码分析在维基百科上可以查到很详细的介绍:https://en.wikipedia.org/wiki/List_of_to ...
- Android代码分析工具lint学习
1 lint简介 1.1 概述 lint是随Android SDK自带的一个静态代码分析工具.它用来对Android工程的源文件进行检查,找出在正确性.安全.性能.可使用性.可访问性及国际化等方面可能 ...
- pmd静态代码分析
在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...
- [Asp.net 5] DependencyInjection项目代码分析-目录
微软DI文章系列如下所示: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Autofac [ ...
随机推荐
- Usermod 命令详解
参考资料:usermod manpage usermod - 修改用户帐户信息 modify a user account usermod [options] user_name usermod 命令 ...
- asp防注入安全问题
一.古老的绕验证漏洞虽然古老,依然存在于很多小程序之中,比如一些企业网站的后台,简单谈谈.这个漏洞出现在没有对接受的变量进行过滤,带入数据库判断查询时,造成SQL语句的逻辑问题.例如以下代码存在问题: ...
- DLL 支持MFC 没有DLLMAIN函数
如果使用VC编写DLL时,需要MFC功能: 一般在源文件里就不能手动写DLLMAIN函数了 它给MFC集成了,\src\mfc\dllmodule.cpp打开它,里面有有一个DLLMAIN函数,根据源 ...
- Linq基本用法
- http://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html
http://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html
- pointcut 表达式的含义
execution(* com.spring.dao.*.add*(..)) 第一个*表示任意返回值 第二个*表示com.spring.dao包中所有类 第三个*表示以add开头的所有方法 (..)表 ...
- redis面试
1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,li ...
- 【转】VMware设置共享文件夹之后Ubuntu中看不到怎么办?
一.共享文件夹设置好了,但是在虚拟机中的Ubuntu系统下却看不到,怎么办? 一种可能的原因是系统没有自动挂载,解决办法: 1.安装: sudo apt-get insta ...
- if语句写在while语句外面效率更高
为了排除某些特殊的文件后缀名,一开始我自然而然的这样写,判断每一个文件的后缀名: // 去除后缀名 foreach (const QString &strKey, local_map.keys ...
- ArcGIS学习记录—属性表的编辑与修改
原文地址: ArcGIS问题:属性表的编辑与修改 - Silent Dawn的日志 - 网易博客 http://gisman.blog.163.com/blog/static/344933882009 ...
