CppCheck的使用

简介: CppCheck的使用

一、 实验要求

明白CppCheck的配置及原理,并使用CppCheck进行代码缺陷的检查,进行总结。

1

二、 CppCheck的原理介绍

1、Cppcheck先是分析拆解代码,将每个有效字符作为一个token(token是抽象代码中所有字符的

类,包含字符的字符串,类型等),提供tokenlist,规则实现者通过匹配需要的字符找到感兴趣的代

码,然后通过计算查找bug注意点:其中Cppcheck会做预处理和简化代码的操作,比如include头文件,

展开宏,在每一个token直接用一个空格分隔等。


2. 开发中使用主要的类有:

(1)Tokenizer类: 代码token化, 计划代码

(2)SymbolDatabase类:符号数据库,生成和存储各种符号:scope,function, variable等

(3)Scope类: 各种代码block。最常用的有functionScopes, classAndStructScopes等

(4)Token类: 里面有str(), next(), previous(), tokAt(), link(),Match()等常用函数

(5)Variable类:getTypeString()  

(6)Function类:可以找到实现的scope

(7)Value类: token可以通过getValue()得到可能的值


3. 作为编译器的一种补充检查,cppcheck对产品的源代码执行严格的逻辑检查。 执行的检查包括:

(1)自动变量检查

(2)数组的边界检查

(3)class类检查

(4)过期的函数,废弃函数调用检查

(5)异常内存使用,释放检查

(6)内存泄漏检查,主要是通过内存引用指针

(7)操作系统资源释放检查,中断,文件描述符等

(8)异常STL 函数使用检查

(9)代码格式错误,以及性能因素检查



三、 CppCheck的使用

1. 自动变量检查

微信图片_20230701154227.png



2. 数组的边界检查

微信图片_20230701154225.png



3. Class类检查

微信图片_20230701154222.png



4. 过期的函数,废弃函数调用检查


微信图片_20230701154219.png


5. 异常内存使用,释放检查


微信图片_20230701154203.png


6. 内存泄漏检查


微信图片_20230701154159.png


7. 操作系统资源释放检查

微信图片_20230701154145.png


8. 异常STL函数使用检查

微信图片_20230701154013.png


9.代码格式错误检查


微信图片_20230701153957.png


四、 心得体会

经过一段时间的学习,对CppCheck进行了了解和学习,并且使用它进行了各种对应的测试,在这个过程中,自己的一些方面有了进步,比如软件的安装配置,软件的使用,代码的编写等,每一个不同的实验都能带来不同的成长,感谢老师在课堂上大量的提问的方式,同样使我学到了很多,对软件测试有了一些自己的想法,并且通过紧张的提问,很容易的就记住了这门课的知识,对做实验有所帮助。


相关文章
|
XML 安全 IDE
【C/C++ 实用工具】CppCheck:静态代码检测工具,让你的代码更安全
【C/C++ 实用工具】CppCheck:静态代码检测工具,让你的代码更安全
2924 2
|
存储 编解码 Linux
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
FFmpeg+SDL播放器开发实践:解析、解码、渲染全流程详解
|
IDE Linux 开发工具
内存泄漏检测工具Valgrind:C++代码问题检测的利器(一)
内存泄漏检测工具Valgrind:C++代码问题检测的利器
2805 0
|
人工智能 NoSQL C语言
程序又崩了?一招精准定位段错误!
在C/C++开发中,程序崩溃(如段错误)是常见问题,但快速定位崩溃原因却颇具挑战。本文介绍了一种精准定位崩溃问题的方法:通过捕获异常信号(如SIGSEGV),结合`backtrace()`和`abi::__cxa_demangle()`打印堆栈信息,从而快速定位问题接口。相比增加日志或生成coredump文件,此方法更高效且无副作用。实现时需注意编译选项(如`-O0 -g -rdynamic`)以保留符号信息,并处理C++名称修饰问题。
253 0
|
12月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
793 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
12月前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
SQL 存储 大数据
SQL 语言发展史简直太震撼啦!从诞生到现代数据处理,见证一场奇妙的演变之旅,快来感受!
【8月更文挑战第31天】SQL(结构化查询语言)自20世纪70年代由IBM研究员E.F. Codd提出以来,已成为现代数据处理不可或缺的一部分。它最初简化了层次和网状模型中复杂的存储与检索问题,通过基本的SELECT、FROM和WHERE关键字实现了数据查询。80年代,SQL在商业数据库中广泛应用,引入了GROUP BY、HAVING和ORDER BY等功能,增强了数据分析能力。90年代,互联网和企业信息化推动了SQL的进一步优化与扩展,支持分布式数据库和数据仓库等技术。
527 0
|
存储 安全 算法
加盐哈希的科学原理及其重要性
【8月更文挑战第31天】
629 0
|
存储 缓存 资源调度
Yarn: 安装与使用教程
Yarn: 安装与使用教程
1214 3
|
C++ 开发者
cpplint 新增自定义checker介绍
通过为cpplint新增自定义规则,可以让 cpplint 更加贴合项目的编码规范,从而提高代码的质量和一致性。
292 0