Enviar búsqueda
Cargar
检查实现类
•
Descargar como PPTX, PDF
•
0 recomendaciones
•
370 vistas
W
Wu Liang
Seguir
这是cppcheck的检查实现类
Leer menos
Leer más
Educación
Denunciar
Compartir
Denunciar
Compartir
1 de 39
Descargar ahora
Recomendados
Cppcheck分析
Cppcheck分析
Wu Liang
cppcheck源码分析
cppcheck源码分析
Wu Liang
Ecma script3
Ecma script3
gniavaj
JavaScript 教程
JavaScript 教程
Bobby Zhou
簡單介紹JavaScript變數範圍
簡單介紹JavaScript變數範圍
林儀泰 Tommy Lin
Javascript Training
Javascript Training
beijing.josh
Introduction to C++ over CLI
Introduction to C++ over CLI
建興 王
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
Recomendados
Cppcheck分析
Cppcheck分析
Wu Liang
cppcheck源码分析
cppcheck源码分析
Wu Liang
Ecma script3
Ecma script3
gniavaj
JavaScript 教程
JavaScript 教程
Bobby Zhou
簡單介紹JavaScript變數範圍
簡單介紹JavaScript變數範圍
林儀泰 Tommy Lin
Javascript Training
Javascript Training
beijing.josh
Introduction to C++ over CLI
Introduction to C++ over CLI
建興 王
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
Dynamo cassandra
Dynamo cassandra
Wu Liang
Hmaster
Hmaster
Wu Liang
Bst svn专项培训
Bst svn专项培训
Wu Liang
向量空间模型与动态规划分享
向量空间模型与动态规划分享
Wu Liang
Trie树分享
Trie树分享
Wu Liang
Smart pointer
Smart pointer
Wu Liang
An Efficient Language Model Using Double-Array Structures
An Efficient Language Model Using Double-Array Structures
Jun-ya Norimatsu
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
异步编程与浏览器执行模型
异步编程与浏览器执行模型
keelii
Scala function-and-closures
Scala function-and-closures
wang hongjiang
第六章 函數與巨集
第六章 函數與巨集
shademoon
Python變數與資料運算
Python變數與資料運算
吳錫修 (ShyiShiou Wu)
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
Sun java
Sun java
softwaredesigner
Asp.net mvc 培训
Asp.net mvc 培训
lotusprince
所谓闭包
所谓闭包
ilovey4
所谓闭包
所谓闭包
youzitang
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
Dev307
Dev307
建興 王
Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Hazem Saleh
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
zhangdaiping
Más contenido relacionado
Destacado
Dynamo cassandra
Dynamo cassandra
Wu Liang
Hmaster
Hmaster
Wu Liang
Bst svn专项培训
Bst svn专项培训
Wu Liang
向量空间模型与动态规划分享
向量空间模型与动态规划分享
Wu Liang
Trie树分享
Trie树分享
Wu Liang
Smart pointer
Smart pointer
Wu Liang
An Efficient Language Model Using Double-Array Structures
An Efficient Language Model Using Double-Array Structures
Jun-ya Norimatsu
Destacado
(7)
Dynamo cassandra
Dynamo cassandra
Hmaster
Hmaster
Bst svn专项培训
Bst svn专项培训
向量空间模型与动态规划分享
向量空间模型与动态规划分享
Trie树分享
Trie树分享
Smart pointer
Smart pointer
An Efficient Language Model Using Double-Array Structures
An Efficient Language Model Using Double-Array Structures
Similar a 检查实现类
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
异步编程与浏览器执行模型
异步编程与浏览器执行模型
keelii
Scala function-and-closures
Scala function-and-closures
wang hongjiang
第六章 函數與巨集
第六章 函數與巨集
shademoon
Python變數與資料運算
Python變數與資料運算
吳錫修 (ShyiShiou Wu)
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
Sun java
Sun java
softwaredesigner
Asp.net mvc 培训
Asp.net mvc 培训
lotusprince
所谓闭包
所谓闭包
ilovey4
所谓闭包
所谓闭包
youzitang
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
Dev307
Dev307
建興 王
Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Hazem Saleh
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
zhangdaiping
并发控制
并发控制
beckrabbit
Java华为面试题
Java华为面试题
yiditushe
从问题开始,谈前端架构
从问题开始,谈前端架构
裕波 周
1 C入門教學
1 C入門教學
Sita Liu
Similar a 检查实现类
(19)
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
异步编程与浏览器执行模型
异步编程与浏览器执行模型
Scala function-and-closures
Scala function-and-closures
第六章 函數與巨集
第六章 函數與巨集
Python變數與資料運算
Python變數與資料運算
Ecma script edition5-小试
Ecma script edition5-小试
Sun java
Sun java
Asp.net mvc 培训
Asp.net mvc 培训
所谓闭包
所谓闭包
所谓闭包
所谓闭包
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
Dev307
Dev307
Java Script 引擎技术
Java Script 引擎技术
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
基于原型的JavaScript面向对象编程
基于原型的JavaScript面向对象编程
并发控制
并发控制
Java华为面试题
Java华为面试题
从问题开始,谈前端架构
从问题开始,谈前端架构
1 C入門教學
1 C入門教學
Último
【創業簡報練習】當一個人吃飯會想起誰:(A)I-DOLL 陪吃娃娃|科技創業與營運實務
【創業簡報練習】當一個人吃飯會想起誰:(A)I-DOLL 陪吃娃娃|科技創業與營運實務
sardinesaying
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
CHANSUITNEEMoe
30T.ppt【国外大学文凭样本】TWU毕业证认证Q/微:892798920办西三一大学毕业证留信留服使馆公证,TWU硕士毕业证,TWU研究生毕业证,文凭...
30T.ppt【国外大学文凭样本】TWU毕业证认证Q/微:892798920办西三一大学毕业证留信留服使馆公证,TWU硕士毕业证,TWU研究生毕业证,文凭...
ggbob1
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
shanshanhui1
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
黑客 接单【TG/微信qoqoqdqd】
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
kathrynalvarez364
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
bairnshajjes
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
gravestomas0
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptx
PriscilleXu
GPA低怎么办? | 身份黑后回复方案 | 出入境激活 身份恢复美本GPA太低了怎么办黑客服务,黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修...
GPA低怎么办? | 身份黑后回复方案 | 出入境激活 身份恢复美本GPA太低了怎么办黑客服务,黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修...
黑客 接单【TG/微信qoqoqdqd】
【国外大学文凭样本】多大毕业证认证Q/微:892798920办多伦多大学毕业证留信留服使馆公公证,多大硕士毕业证,U of T研究生毕业证,文凭,改U o...
【国外大学文凭样本】多大毕业证认证Q/微:892798920办多伦多大学毕业证留信留服使馆公公证,多大硕士毕业证,U of T研究生毕业证,文凭,改U o...
ggbob1
Último
(11)
【創業簡報練習】當一個人吃飯會想起誰:(A)I-DOLL 陪吃娃娃|科技創業與營運實務
【創業簡報練習】當一個人吃飯會想起誰:(A)I-DOLL 陪吃娃娃|科技創業與營運實務
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
JAWAPAN BUKU AKTIVITI BAHASA CINA TAHUN 3.pptx
30T.ppt【国外大学文凭样本】TWU毕业证认证Q/微:892798920办西三一大学毕业证留信留服使馆公证,TWU硕士毕业证,TWU研究生毕业证,文凭...
30T.ppt【国外大学文凭样本】TWU毕业证认证Q/微:892798920办西三一大学毕业证留信留服使馆公证,TWU硕士毕业证,TWU研究生毕业证,文凭...
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
003 DSKP KSSR SEMAKAN 2017 BAHASA CINA TAHUN 3.pdf
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
我了解到黑客在某些领域拥有卓越的技术能力,特别是在处理系统漏洞方面。在当前的情境下,如果我想要改变我的毕业成绩,他们的帮助或许是我唯一可行的选择。【微 t...
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
哪里可以购买日本神奈川县立保健福祉大学学位记/录取通知书可以制作吗/补办马来西亚大学文凭/CIA证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
加急代办一个日本鹿儿岛纯心女子大学学位记🌈学习成绩单电子版定制🌈仿制荷兰大学毕业证🌈日语JLPT证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
未毕业在线购买日本熊本县立大学学位记🏆学习成绩单电子版定制🏆克隆爱尔兰大学文凭🏆CFA证书定制
Grade 6 Lesson 7 Environment Protection.pptx
Grade 6 Lesson 7 Environment Protection.pptx
GPA低怎么办? | 身份黑后回复方案 | 出入境激活 身份恢复美本GPA太低了怎么办黑客服务,黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修...
GPA低怎么办? | 身份黑后回复方案 | 出入境激活 身份恢复美本GPA太低了怎么办黑客服务,黑客修改大学成绩,黑客改成绩单,黑客入侵教务系统,找黑客修...
【国外大学文凭样本】多大毕业证认证Q/微:892798920办多伦多大学毕业证留信留服使馆公公证,多大硕士毕业证,U of T研究生毕业证,文凭,改U o...
【国外大学文凭样本】多大毕业证认证Q/微:892798920办多伦多大学毕业证留信留服使馆公公证,多大硕士毕业证,U of T研究生毕业证,文凭,改U o...
检查实现类
1.
检查类 cppcheck共有15个检查类实现了其检查功能
2.
自动变量检查 自动变量问题 自动变量也就是局部变量,存储空间在栈stack中,函数结束时空间被释放,如果此时变量地址被外部空间的函数使用,将会引起错误。
自动变量暴露到外部窗口 从参数(指向地址变量指针即指向指针的指针) return 全局指针变量… 其他 ….
3.
自动变量检查 错误举例:
4.
自动变量检查 实现类 class
CheckAutoVariables
5.
Class CheckAutoVariables autoVariables();
检查自动变量 returnPointerToLocalArray(); 检查是否返回了指向局部数组的指针 returnReference() 检查是否返货了指向局部变量的引用 returncstr() 检查是否返回局部字符串
6.
CheckAutoVariables.autoVariables() 实现: 关键变量:
std::set<std::string> fp_list; 函数参数中指向指针的指针参数集合 std::set<unsigned int> vd_list; 自动变量集合 std::set<unsigned int> vda_list; 自动变量数组集合 std::set<unsigned int> unknown_type; boolbegin_function = false; 进入函数的标志 boolbegin_function_decl = false 进入函数参数声明部分标志 函数
7.
CheckAutoVariables.autoVariables() 错误捕获特征 自动变量地址被赋给函数参数
“[;{}] %var% = & %var%" %var%是fp_list . %var% in vd_list "[;{}] * %var% = & %var%" %var%是fp_list . %var% in vd_list "[;{}] %var% [ %any% ] = & %var%“ %var%是fp_list . %var% in vd_list 自动变量地址返回 "return & %var% ;" %var% in vd_list 无效空间释放 "free ( %var% ) ;" isAutoVarArray %var% in vda_list
8.
.returnPointerToLocalArray() 提取数组特征 "[;{}]
%type% %var% [“ 将所有数组变量加入到 std::set<unsigned int>arrayVar 错误特征 “return %var%” 且 %var% 在集合arrayVar中
9.
返回引用函数的问题 当f()运行结束时 str_local其实已经被释放了。
*好消息是 gcc就能查出此类问题
10.
.returnReference() 描述:检查返回自动变量引用的函数 (error)
Returning reference to auto variable 关键数据 std::set<unsigned int> localvar; 存储所有发现的自动变量 寻找目标函数——返回引用的函数 函数特征 "%type% & %var% (“ 或"> & %var% ("
11.
.returnReference() 提取数组特征 “[;{}]
%type% %var% [” 或“%type% < %any% > %var%”; 将所有自动变量 加入到localvar 错误特征 “return %var% ; ” 且 %var% 在集合calvar中
12.
.returncstr() 描述:检查返回字符串自动地址的函数 (error)
Returning pointer to auto variable 关键数据 std::set<unsigned int> localvar; 存储所有发现的自动变量 寻找目标函数——返回字符串的函数 特征 "const char *" 或"> & %var% ("
13.
.returncstr() 提取变量特征
"%type% %var% [;=]" localvar.insert(tok2->next()->varId()); 将所有自动变量 加入到localvar 错误特征 "return %var% . c_str ( ) ;“且 %var% 在集合localvar中
14.
存在问题 没有处理指针传递 识别不精确
错误检查不精确
15.
缓冲区溢出检查 缓冲区溢出问题 缓冲区也就是一块内存空间,它可以是在栈中的局部变量(例如,静态数组),也可以是堆中的内存区域,程序中动态产生(例如,malloc,C++支持的动态数组)变量也就是局部变量。
所谓溢出也就是访问的地址空间超出了缓冲区内存区域,常见有两种方式导致溢出,一是显示的index越界,如数组越界,另外就是一些内存操作函数使用不当引发,如memcpy,memset…等内存操作函数
16.
缓冲区溢出检查 错误举例:
17.
缓冲区溢出检查 实现类class CheckBufferOverrun
18.
缺陷 不支持指针传递 识别缓冲区精确度不高
动态数组,malloc固定空间等缓冲区不能识别 字符串常量 char* p=“hello” (注:这段空间不是缓冲区,不可写哦) 内存操作函数检查的覆盖面不光,及一些双内存空间操作检查的不好 如memcpy(void *destin, void *source, unsigned n);
19.
类检查 面向对象编程问题 c++的面向对象编程存在一些安全隐患,一些经典的c++编程书籍都有提到,cppcheck实现了《effective
c++》中提到的一些安全隐患检查 如:多态基类需要实现vitual的析构函数 不在构造和析构函数中使用vitual函数 operator = 必须返回*this operator = 需处理自我赋值的情况 …… 这些特性要加 –s 才启动
20.
类检查 实现类class CheckClass
21.
类检查 主要实现函数 checkClass.constructors();
checkClass.operatorEq(); checkClass.privateFunctions(); checkClass.thisSubtraction(); checkClass.checkConst(); checkClass.virtualDestructor(); checkClass.operatorEqToSelf(); checkClass.operatorEqRetRefThis();
22.
其他检查
23.
检查扩充 Cppcheck预留接口class checkother
24.
内存泄露检查 内存泄露问题
内存泄露指的是在程序运行时,动态的申请了内存(堆),但是使用过后没有释放,导致一些内存永远得不到收回。 这是cppcheck最有价值的检查功能,也是实现代码最长的一块检查
25.
内存泄露检查 实现类 class
CheckMemoryLeakStructMember class CheckMemoryLeakInFunction class CheckMemoryLeakInClass class CheckMemoryLeakNoVar
26.
CheckMemoryLeakStructMember 检查内容: 在一个函数内、检查结构成员结构体被释放(返回)时,其成员不释放空间
返回错误 (error) Memory leak: STRUCT.MEMBER 中间点表示成员
27.
典型错误类型
28.
Class CheckMemoryLeakStructMember 实现接口(runSimplifiedChecks)
核心函数 check() 辅助函数 getAllocType() getDeallocationType()
29.
30.
2 成员变量在函数(所有函数,不单单是一个函数中)中分配空间,与释放空间函数不成匹配(malloc
– free , new -delete)出现算法描述: 两个变量:AllocDealloc 一但对成员变量被分配空间,Alloc被置值,如果发现对变量释放空间函数,Dealloc置值,并立即对比,是否是同一类内存申请释放函数,如果不是,则立即报dismatch错,遍历完所有类的函数
31.
典型错误类型
32.
错误输出 否存在有Alloc无Dealloc的情况,有则报错memleak,(有函数中有申请,必须有函数释放,不一定在同一函数中申请释放) (error)
Memory leak: CLASSNAME ::MEMBER 发现不匹配 (error) Mismatching allocation and deallocation CLASSNAME ::MEMBER 检查构造函数,析构函数中是否成对(申请,释放)(如果构造中有内存申请,析构中必须有释放,) (error) Memory leak: CLASSNAME ::MEMBER
33.
Class CheckMemoryLeakInClass 实现接口(runSimplifiedChecks)
核心函数 check() , variable() 辅助函数 getAllocType() getDeallocationType()
34.
典型错误类型
35.
Class CheckMemoryLeakNoVar 检查
函数的参数部分有无内存泄露 报错信息: (error) Allocation with FUNCNAME, FUNCNAME doesn't release it.
36.
Class CheckMemoryLeakNoVar 实现接口(runSimplifiedChecks)
核心函数 check() 辅助函数 getAllocType() getDeallocationType()
37.
38.
Class CheckMemoryLeakInFunction 实现接口(runSimplifiedChecks)
核心函数 check() parseFunctionScope() checkScope() getcode() findLeak() 辅助函数 getAllocType() getDeallocationType()
39.
内存泄露新增 重写了新的函数检查类 Class
CheckMemoryLeakInFunction_new
Descargar ahora