简介
官方网站: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