cppcheck代码静态检查工具及相关工具插件用法介绍

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

Cppcheck着重于检测未定义的行为和危险的编码结构,未定义行为包括:
死去的指针
除零
整数溢出
无效位移位操作数
无效的转换
STL的无效使用
内存管理
空指针取消引用
出界检验
未初始化变量
文字常量数据

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


cppcheck项目主页


一. 源码编译

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

一. 可执行文件

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:

  1. Select Help > About Plugins > Code Analyzer > Cppcheck to enable the plugin.
  2. Restart Qt Creator to load the plugin.
  3. Select Tools > Options > Analyzer > Cppcheck to specify settings for running Cppcheck.
    "Cppcheck options"
  4. In the Binary field, enter the path to the Cppcheck executable file.
  5. 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.
  6. 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.
  7. 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.
  8. Select the Inconclusive errors check box to also mark possible false positives.
  9. 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.
  10. 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.
  11. 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-vs-addin,双击vsix文件自动安装,支持VS2015和VS2017,安装完成后位于工具菜单,可对当前代码文件和项目进行缺陷静态分析。
    或者安装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

参考【cppcheck实现c++代码静态检查】

其他客户端与插件

来自cppcheck项目主页

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)



Sep.2019
mdo_lpf@163.com

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342