摘要:介绍代码缺陷静态检查工具(static code analyzer)cppcheck,以及其vs、qtcreator、git、jenkins插件及用法。

Cppcheck着重于检测未定义的行为和危险的编码结构,未定义行为包括:

死去的指针

除零

整数溢出

无效位移位操作数

无效的转换

STL的无效使用

内存管理

空指针取消引用

出界检验

未初始化变量

文字常量数据

更多检查范围参考cppcheck/wiki/ListOfChecks/

一. 源码编译

项目github地址

使用cmake、qmake、vs等编译方式直接参考项目readme.md

一. 可执行文件

安装

windows安装文件github-release下载地址

linux下可使用dnf、yum、apt-get等直接安装

安装过程略,如果被外部引用,将cppcheck.exe所在目录加入Path,打开cppcheckgui.exe即可进行代码检查。

命令行基本用法示例【参考地址】:

cppcheck foo.cpp src/a.cc # 检查指定的[多个]文件

cppcheck dir # 递归检查dir中所有文件

cppcheck -isrc/a.cc src # 检查src下除a.cc以外的文件,使用-i选项排除.

cppcheck --enable=warning,performance,style,information,all foo.cc #警告等级

cppcheck -j4 src # 多线程

cppcheck --inconclusive src # 包括不确定错误

cppcheck --project=cmake_check_project.json # 检查cmake管理的项目

# 其中json文件使用cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON生成

cppcheck --project=some.sln # 检查整个vs解决方案

cppcheck --project=some.vcxproj # 检查单个vs项目

#默认情况下,Cppcheck 将检查所有预处理器配置。

cppcheck -D_MACRO_ src # 只检查_MACRO_宏启用的情况,不检查其他

cppcheck -D_MACRO_ --force src # 检查_MACRO_宏启用条件下的其他宏所有配置

cppcheck -U_MACRO_ --force src # 检查_MACRO_宏非启用的情况

cppcheck --xml-version=2 src # 输出xml结果文件,并使用version2

cppcheck --template=vs|gcc|{file},{line},{severity},{id},{message}" src # 使用vs或gcc或自定义格式输出

缺陷的严重性等级:

错误error

当发现 bug 时使用

警告warning

关于防御性编程,以防止 bug 的建议

风格style

风格有关问题的代码清理(未使用的函数、冗余代码、常量性等等)

可移植性portability

可移植性警告。64 位的可移植性,代码可能在不同的编译器中运行结果不同。

性能performance

建议使代码更快。这些建议只是基于常识,即使修复这些消息,也不确定会得到任何可测量的性能提升。

信息information

配置问题,建议在配置期间仅启用这些。

二. 客户端与插件

qtcreator

下载安装QtProjectTool,qpt,qpt支持cppcheck、cpplint、krazy、vera++等工具。在creator中,qpt作为外部工具(工具->外部),具体配置和使用见qpt_manaul.pdf

使用高版本qtcreator(4.10已有)自带功能【Analyzing Code with Cppcheck】,直接在编辑器中提示缺陷信息,并可自动按建议修改。

Analyzing Code with Cppcheck

Cppcheck is a static analysis tool that detects errors in C++ code. Static analysis is performed on the source code without actually executing the application.

The experimental Cppcheck Diagnostics plugin integrates diagnostics that are generated by the Cppcheck tool into the C++ editor.

To enable running Cppcheck automatically on currently open files:

Select Help > About Plugins > Code Analyzer > Cppcheck to enable the plugin.

Restart Qt Creator to load the plugin.

Select Tools > Options > Analyzer > Cppcheck to specify settings for running Cppcheck.

"Cppcheck options"

In the Binary field, enter the path to the Cppcheck executable file.

In the Checks group, select the checks to perform on currently open files.

**Note: **By default, Cppcheck uses multiple threads to perform checks. Selecting the Unused functions option disables the default behavior.

In the Custom arguments field, enter additional arguments for running Cppcheck. The arguments might be shadowed by automatically generated ones. To avoid possible conflicts in configuration, select the Show raw output check box to see the final arguments.

In the Ignored file patterns field, enter a filter for ignoring files that match the pattern (wildcard). You can enter multiple patterns separated by commas. Even though Cppcheck is not run on files that match the provided patterns, they might be implicitly checked if other files include them.

Select the Inconclusive errors check box to also mark possible false positives.

Select the Check all define combinations check box to check all define combinations. Enabling this option can significantly slow down analysis, but might help to find more issues.

Select the Add include paths check box to pass the current project's include paths to Cppcheck. Enabling this option slows down checks on big projects, but can help Cppcheck to find missing includes.

Select the Calculate additional arguments check box to calculate additional arguments based on current project's settings (such as the language used and standard version) and pass them to Cppcheck.

Qt Creator automatically runs Cppcheck on currently opened documents and displays results via text marks or annotations.

visual studio

需要本地cppcheck.exe支持(标题一)。

下载安装或者安装cppcheck后手动添加外部工具:

在Visual Studio菜单栏"工具"→"外部工具",点击"添加",内容如下:

标题:Cppcheck

命令:D:\Program Files\Cppcheck\cppcheck.exe

参数:--enable=all --template=vs $(SolutionDir)

勾选"使用输出窗口"

xx

git

将cppcheck/tools/git-pre-commit-cppcheck文件加入 .git/hooks目录,每次commit时候,会自动执行cppcheck检查缓冲区的文件,如果有错误,即不允许commit.

jenkins

其他客户端与插件

CLion - Cppcheck插件

Code :: Blocks - 集成

CodeDX(软件保障工具) - 集成

CodeLite - 集成

CppDepend 5 - 整合

Eclipse - Cppcheclipse

KDevelop - 自v5.1开始集成

gedit - gedit插件

Hudson - Cppcheck插件

Jenkins - Cppcheck插件

Mercurial(Linux) - 预提交钩子 - 检查提交时的新错误(需要交互式终端)

Tortoise SVN - 添加预提交钩子脚本

Git(Linux) - 预提交钩子 - 检查进入提交的文件中的错误(需要交互式终端)

Visual Studio - Visual Studio插件

QtCreator - Qt项目工具(qpt)

cppcheck 自定义规则_cppcheck代码静态检查工具及相关工具插件用法介绍相关推荐

  1. 代码静态检查工具PC-Lint运用实践

    代码静态检查工具PC-Lint运用实践 如何提交zero bug的产品,如何尽早发现bug,是软件开发工程师和测试工程师都需要思考的问题.我认为高质量的代码是关键,具体实施保障办法有:框架约束,代码评 ...

  2. Jenkins 在 Tomcat 中的部署及代码静态检查工具集成

    Jenkins 的简单部署 在安装了 Jenkins 运行所需的依赖(主要是 JDK)之后,可以通过如下步骤简单快速地部署 Jenkins: 下载 Jenkins. 打开终端并切换至下载目录. 运行命 ...

  3. 一些代码静态检查工具的简介

    1.KLOCWORK: 适用语言:C, C++, JAVA 是否开源:否, 是否需要编译:是 作用:代码静态检查工具.用于高效检测软件缺陷和安全隐患,提供优秀的静态源代码分析解决方案.软件号称是业界领 ...

  4. 代码静态检查工具汇总

    静态代码扫描,借用一段网上的原文解释一下(这里叫静态检查):"静态测试包括代码检查.静态结构分析.代码质量度量等.它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码 ...

  5. cppcheck 自定义规则_cppcheck检查规则

    规则 中文描述 R-1-2-3 禁止在头文件前有可执行代码. R-1-2-4 引起二义性理解的逻辑表达式,必须使用括号显式说明优先级顺序. R-1-2-5 逻辑判别表达式中的运算项必须要使用括号. R ...

  6. php代码静态检查工具,代码静态检查工具汇总

    工具名 静态扫描语言开源/付费 厂商 介绍 主页网址 ounec5.0 VB.Net.C.C++和C#, 还支持Java. 付 费 Ounce Labs \ http://www.ouncelabs. ...

  7. c++代码静态检查工具——cpplint使用技巧

    cpplint使用技巧 google c++ 编码规范    (中文 ) 李开复微博爆谷歌公开 C++编码规范 称全球最好, 开复认证,值得信赖@@@ 这篇文档确实值得去细看,不过条条框框太多,不强制 ...

  8. cppcheck 自定义规则_cppcheck扫描规则

    规则 描述 arrayIndexOutOfBounds 数组下标越界 arrayIndexThenCheck 数组越界访问 bufferAccessOutOfBounds 缓冲区访问越界 CastIn ...

  9. C/C++代码静态检查工具PC-lint在VS2008开发环境中的安装配置和使用

    PC-Lint偏重于代码的逻辑分析,它能够发现代码中潜在的错误,比如数组访问越界.内存泄漏.使用未初始化变量等. 1.  从http://download.csdn.net/detail/liucha ...

最新文章

  1. 排列和组合简单的递归思路以及C++实现
  2. VS2012+EF6+Mysq
  3. Java 8 类型转换及改进
  4. Cpp 对象模型探索 / 虚继承带虚函数的基类的子类的内存布局
  5. 2016年华为网络技术精英大赛复赛试题
  6. [css] 为什么会出现浮动?在什么时候需要清除浮动呢?
  7. css 块元素、内联元素、内联块元素
  8. matplotlib绘制极坐标图像
  9. Fiddler实现IOS手机抓取https报文
  10. Servlet学习-MVC开发模式
  11. puppetmaster 自动签名
  12. win7读取linux硬盘序列号,Windows 下获取硬盘序列号
  13. 计算机主机技术标准规范,B级机房技术规范要求
  14. Unity查找图片被哪个Prefab引用
  15. 纯干货,用好PPT中的异形,提高页面的设计感,建议收藏!
  16. 假设中国某航空公司规定: 中国去欧美的航线所有座位都有食物供应。每个座位都可以播放电影。 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。 中国国内的航班的商务仓有食物供应,但是不可
  17. 工控机CF卡槽无法使用的解决方案
  18. win7局域网计算机 慢,Win7系统局域网访问文件速度缓慢怎么办
  19. 推荐一个在上海买中老年服饰的地方
  20. 这篇文章终于把中美德三国的工业互联网讲清楚了

热门文章

  1. 神经形态网络——大脑神经图论文阅读笔记【1】
  2. getattr 函数详讲
  3. Lumen 9.x 对路由限流的正确姿势【别乱抄代码了】
  4. LED体重秤解决方案
  5. mysql 删除重复数据 保留一个_MySQL学习笔记-删除重复数据只保留一条
  6. QT+Halcon实现3D图像显示
  7. linux splunk,splunk linux安装
  8. 【MySQL】ON DUPLICATE
  9. 嵌入式Android底层开发(三)硬件访问服务框架
  10. 国科大的计算机水平如何,清华眼中的国科大是什么级别?国科大厉害还是清北厉害?...