代码检查工具cppcheck的安装及使用

 

简介

官方网站:http://cppcheck.net/

Cppcheck 是用于 C/C++ 代码的静态分析工具。它提供独特的代码分析来检测错误,并专注于检测未定义的行为和危险的编码构造。目标是实现很少的误报。Cppcheck旨在能够分析您的C / C++代码,即使它具有非标准语法(在嵌入式项目中很常见)。

安装

Windows

下载安装包安装即可。下载地址:http://cppcheck.net/

Linux

Cppcheck can also be installed from various package managers; however, you might get an outdated version then.

Debian

sudo apt-get install cppcheck

Fedora

sudo yum install cppcheck

Mac

brew install cppcheck

用法

单个文件

cppcheck xxx.c

文件夹下的所有文件

cppcheck <file_dir>

过滤文件夹不检查

cppcheck -i./build ./

检查级别

warning :cppcheck --enable=warning file.c
performance :cppcheck --enable=performance file.c
information :cppcheck --enable=information file.c
all :cppcheck --enable=all

检查结果保存

cppcheck xxx.c 2> cppcheck_report.log

多线程检查

cppcheck -j 4 <file_dir>

XML输出

Cppcheck 可以生成 XML 格式的输出。有一个旧的 XML 格式(version 1)和一个新的 XML 格式(version 2)。如果可以,请使用新版本。

旧版本保持向后兼容性。它不会改变,但有一天可能会被删除。使用 --xml 支持这种格式。

新版本修复一些旧格式的问题。新格式可能会在 cppcheck 的未来版本中更新,并带有新的属性和元素。用于检查文件并以新的 XML 格式输出错误的示例命令:

cppcheck --xml-version=2 file.cpp

格式化输出

如果想重新格式化输出,使它看起来不同,可以使用模板。

要获得 Visual Studio 兼容的输出,可以使用 --template=vs

cppcheck --template=vs gui/test.cpp

输出将如下所示:

Checking gui/test.cpp… gui/test.cpp(31): error: Memory leak: b gui/test.cpp(16): error: Mismatching allocation and deallocation: k

要获得 gcc 兼容的输出,可以使用 --template=gcc

cppcheck --template=gcc gui/test.cpp

输出将如下所示:

Checking gui/test.cpp… gui/test.cpp:31: error: Memory leak: b gui/test.cpp:16: error: Mismatching allocation and deallocation: k

可以编写自己的模式(例如,逗号分隔格式):

cppcheck --template="{file},{line},{severity},{id},{message}" gui/test.cpp

输出将如下所示:

Checking gui/test.cpp… gui/test.cpp,31,error,memleak,Memory leak: b gui/test.cpp,16,error,mismatchAllocDealloc,Mismatching allocation and deallocation: k

支持以下格式说明符:

  • callstack 调用栈 - 如果可用
  • file 文件名
  • id 消息 id
  • line 行号
  • message 详细的消息文本
  • severity 一个消息的类型/等级

支持转义序列: \b(退格)、\n(换行)、\r(换页)、\t(水平制表符)

cmake

Cppcheck 可以理解编译数据库,可以用 CMake 生成这些。

例如:

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ../

文件 compile_commands.json 在当前文件夹中创建。

现在像这样运行 Cppcheck:

cppcheck --project=compile_commands.json

Visual Studio

可以对单个项目文件(*.vcxproj)或整个解决方案(*.sln)运行 Cppcheck。

在整个解决方案上运行 cppcheck:

cppcheck --project=foobar.sln

在单个项目文件上运行 cppcheck:

cppcheck --project=foobar.vcxproj

实例

检查当前目录下的所有源文件,排除build文件夹,并以gcc格式输出到cppcheck_report.log

cppcheck --enable=all -i./build ./ 2> cppcheck_report.log