SlideShare una empresa de Scribd logo
1 de 15
Cppcheck架构分析 Cppcheck概述 静态代码分析工具 检查点
Cppcheck架构分析 总体
Cppcheck系统C++实现类
参数分析 外部输入 内部抽象 class Settings 字符交互模式 CmdLineParser parser(&_settings);
Cppcheck总过程
预处理 预处理处理由Preprocessor类实现          执行Class Preprocessor::preprocess()
Tokenize 解析代码成符号 由class Tokenizer实现 实现接口 class Tokenizer::tokenize()
Simplify 目的: 简化复杂代码 统一化 由class Tokenizer实现 实现接口 class Tokenizer::simplifyTokenList() Simplify规则 对变量    对条件循环语句if 、for、while (详细规则见word)
Cppcheck核心类class cppcheck Cppcheck程序的主干类 核心函数check()      处理入口,在此函数对输入代码进行初步分析处理,最后将代码传递给 CheckFile(). 核心函数CheckFile() 函数功能是分析一个代码文件,CheckFile()会将代码流做进一步的分析,做tokenize,simplify,处理后分析代码,报告错误
Class cppcheck::check()函数  &class cppcheck:: CheckFile()函数的实现
Cppcheck检查实现类check
检查类的组织方式:static std::list<Check *> _instances; 链表在哪?     check类instances()函数中静态变量 怎样加入检查类链表? 父类的构造函数执行时加入检查链表 何时实例对象? 命名空间中以全局变量方式存在
Cppcheck核心类check Void runChecks()   主要是检查经过tokenize,但未经过simplify的代码流 Void runSimplifiedChecks()  主要是检查经过tokenize,但未经过simplify的代码流
Cppcheck用户扩展类CheckOther 用户扩展接口 添加检查函数方法:
Thank you

Más contenido relacionado

La actualidad más candente

深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)
wang hongjiang
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
ted-xu
 
Scala function-and-closures
Scala function-and-closuresScala function-and-closures
Scala function-and-closures
wang hongjiang
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
wang hongjiang
 
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Ady Liu
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识
yiditushe
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
jay li
 
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法
crasysatan
 

La actualidad más candente (20)

shell script introduction
shell script introductionshell script introduction
shell script introduction
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)深入剖析Concurrent hashmap中的同步机制(下)
深入剖析Concurrent hashmap中的同步机制(下)
 
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryA Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
 
Scala function-and-closures
Scala function-and-closuresScala function-and-closures
Scala function-and-closures
 
functional-scala
functional-scalafunctional-scala
functional-scala
 
Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
 
深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)深入剖析Concurrent hashmap中的同步机制(上)
深入剖析Concurrent hashmap中的同步机制(上)
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
 
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutorInside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
Inside.java.concurrency 35.thread pool.part8_future.scheduledthreadpoolexecutor
 
J2ee面试知识
J2ee面试知识J2ee面试知识
J2ee面试知识
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
 
Javascript Training
Javascript TrainingJavascript Training
Javascript Training
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 
前端测试
前端测试前端测试
前端测试
 
第一次用 PHPUnit 寫測試就上手
第一次用 PHPUnit 寫測試就上手第一次用 PHPUnit 寫測試就上手
第一次用 PHPUnit 寫測試就上手
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法改善程序设计技术的50个有效做法
改善程序设计技术的50个有效做法
 

Similar a Cppcheck分析

Linux Tracing System 浅析 & eBPF框架开发经验分享
Linux Tracing System 浅析 & eBPF框架开发经验分享Linux Tracing System 浅析 & eBPF框架开发经验分享
Linux Tracing System 浅析 & eBPF框架开发经验分享
happyagan
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
 
Php extension开发
Php extension开发Php extension开发
Php extension开发
thinkinlamp
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
FLASH开发者交流会
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
Shanda innovation institute
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3
areyouok
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
LI Daobing
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
yiditushe
 

Similar a Cppcheck分析 (20)

Linux Tracing System 浅析 & eBPF框架开发经验分享
Linux Tracing System 浅析 & eBPF框架开发经验分享Linux Tracing System 浅析 & eBPF框架开发经验分享
Linux Tracing System 浅析 & eBPF框架开发经验分享
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
ES5 introduction
ES5 introductionES5 introduction
ES5 introduction
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案
 
基于Erlang的
基于Erlang的基于Erlang的
基于Erlang的
 
Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯Cfengine培训文档 刘天斯
Cfengine培训文档 刘天斯
 
函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福函数调用关系工具-2011-孙光福
函数调用关系工具-2011-孙光福
 
Php extension开发
Php extension开发Php extension开发
Php extension开发
 
Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)Avm2虚拟机浅析与as3性能优化(陈士凯)
Avm2虚拟机浅析与as3性能优化(陈士凯)
 
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
[Flash开发者交流][2010.05.30]avm2虚拟机浅析与as3性能优化(陈士凯)
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3
 
第1章 概论
第1章 概论第1章 概论
第1章 概论
 
C#语言的演化
C#语言的演化C#语言的演化
C#语言的演化
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
jasmine入门指南
jasmine入门指南jasmine入门指南
jasmine入门指南
 
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
Accelerating or Complicating PHP execution by LLVM Compiler Infrastructure
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 

Más de Wu Liang (8)

Smart pointer
Smart pointerSmart pointer
Smart pointer
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
 
Dynamo cassandra
Dynamo cassandraDynamo cassandra
Dynamo cassandra
 
向量空间模型与动态规划分享
向量空间模型与动态规划分享 向量空间模型与动态规划分享
向量空间模型与动态规划分享
 
Trie树分享
Trie树分享Trie树分享
Trie树分享
 
Hmaster
HmasterHmaster
Hmaster
 
01 opening remarks
01 opening remarks01 opening remarks
01 opening remarks
 
函数调用关系工具-Lite
函数调用关系工具-Lite函数调用关系工具-Lite
函数调用关系工具-Lite
 

Cppcheck分析