静态代码检测-cppcheck

文章目录

  • 介绍
  • 使用方法
    • 1、检查某一个c/c++ 文件
    • 2、检查某一路径下的所有文件
    • 3、启用需要检查的错误id
    • 4、查看帮助信息
    • 5、查看版本信息
    • 6、忽略检查某个文件或文件夹
    • 7、屏蔽某些文件的警告
    • 8、将检查结果输出到文件
    • 9、多线程检查
  • 常见错误修改
    • 1、缺少头文件
    • 2、缺少初始化
    • 3、未使用的私有函数
    • 4、之前赋值的变量未使用前又重新赋值
    • 5、内存溢出
    • 6、未定义成 const 变量
    • 7、使用标准库进行优化
  • 安装方法
    • 1、linux 安装
      • 1、方法1:(命令行直接安装)
        • 1、Debian / Ubuntu:
        • 2、Fedora:
      • 2、方法2:(源码编译安装)
    • 2、Windows 安装
    • 3、Mac 安装
    • 2、Windows 安装
    • 3、Mac 安装

介绍

Cppcheck 是 C/C++ 代码的分析工具。它提供独特的代码分析来检测错误,并专注于检测未定义的行为和危险的编码结构。目标是仅检测代码中的实际错误,并尽可能少地生成误报(错误报告的警告)。

使用方法

官方用户手册:https://cppcheck.sourceforge.io/manual.html

官方用户手册pdf版本:https://files.cppchecksolutions.com/manual.pdf

cppcheck [OPTIONS] [files or paths]

1、检查某一个c/c++ 文件

cppcheck [files]

例子:检查file.c文件
cppcheck file.c

2、检查某一路径下的所有文件

cppcheck [path]
如果给出的是目录而不是文件名,则会递归检查*.cpp, *.cxx, *.cc, *.c++, *.c, *.ipp, *.ixx, *.tpp, *.txx 等文件

例子:检查test文件夹下的所有文件
eg:cppcheck ./test

3、启用需要检查的错误id

cppcheck --enable=<id> [files or paths]
启用其他检查。可用的错误id列表有<id>:
* all				启用所有检查,建议在检查程序的时候使用,因为这个会启用检查未使用的函数(unusedFunction)
* warning			启用警告消息检查
* style				启用所有编码风格检查,且同时启动 'style', 'warning','performance''portability'
* performance		启用影响性能消息检查
* portability		启用影响可移植性消息检查
* information		启用信息消息
* unusedFunction	启用未使用函数检查,建议在检查程序的时候使用
* missingInclude	启用缺少包含的检查

例子:启用file.c文件的警告的检查
eg:cppcheck --enable=warning file.c

4、查看帮助信息

cppcheck --help

5、查看版本信息

cppcheck --version

6、忽略检查某个文件或文件夹

cppcheck -i <dir or file> [files or paths]

例子:忽略test文件夹下test1文件夹内容的检查
eg:cppcheck -i ./test1 ./test
例子:忽略test文件夹下file.c文件的检查
eg:cppcheck -i file.c ./test

7、屏蔽某些文件的警告

cppcheck --suppress=<spec> [files or paths]
<spec> is:[error id]:[filename]:[line]
[error id] 需要屏蔽的错误id(见本文使用方法的第3条),如果是用“*”则表示屏蔽所有错误

例子:屏蔽test文件夹下,file.c文件的123行的警告
eg:cppcheck ----suppress=warning:file.c:123 ./test

8、将检查结果输出到文件

cppcheck [OPTIONS] [files or paths] 2>file

例子:检查file.c的错误信息输出到err_data.txt文件中
eg:cppcheck file.c 2>err_data.txt

9、多线程检查

cppcheck -j <jobs> [files or paths]

例子:使用4个线程检查file.c文件
eg: cppcheck -j 4 file.c

常见错误修改

1、缺少头文件

eg: information: Include file: “stdio.h” not found. [missingInclude]

解决方法:增加对应的头文件(不过一般编译能通过这类的错误可以忽略)

2、缺少初始化

eg: warning: Member variable ‘a’ is not initialized in the constructor. [uninitMemberVar]

error: Uninitialized variable: data [uninitvar]

error: Uninitialized struct member: s_data [uninitStructMember]

解决方法:给对应缺少初始化的变量a、data,结构体s_data 增加初始化值即可

3、未使用的私有函数

eg: style: Unused private function: ‘mycode::_test’ [unusedPrivateFunction]

解决方法:删除或者屏蔽对应的未使用的函数

4、之前赋值的变量未使用前又重新赋值

eg: style: Variable ‘data’ is reassigned a value before the old one has been used. [redundantAssignment]

解决方法:将变量data用标准的0值进行初始化,或者忽视此警告

5、内存溢出

eg: error: Memory leak: test.data [memleak]

解决方法:在报这个错误的文件行查找内存溢出的原因

6、未定义成 const 变量

eg: performance: Function parameter ‘data’ should be passed by const reference.

解决方法:变量data在函数中未被改变过,应该定义成const变量

7、使用标准库进行优化

eg: style: Consider using std::find_if algorithm instead of a raw loop. [useStlAlgorithm]

解决方法:使用std::find_if算法代替原始循环

安装方法

1、linux 安装

1、方法1:(命令行直接安装)

1、Debian / Ubuntu:
sudo apt-get install cppcheck
2、Fedora:
sudo yum install cppcheck

2、方法2:(源码编译安装)

官网源码下载路径:http://cppcheck.net/

github 源码路径:https://github.com/danmar/cppcheck
静态代码检测-cppcheck_第1张图片
下载完压缩包后,解压压缩包

sudo tar -zxvf cppcheck-2.12.0.tar.gz

进入解压包的路径,创建一个 build 文件夹用来存放编译出来的程序,并进入 build 文件夹,准备编译

cd ./cppcheck-2.12.0
mkdir ./build
cd ./build/

编译 cppcheck

cmake ..
make -j8

等待编译完成后,查看编译出来的程序

ls -l ./bin

得到结果,得知已编译出 cppcheck

root@ubuntu:~/app/cppcheck-2.12.0/build$ ls -l ./bin/
总用量 97640
drwxrwxr-x 4 lyx1 lyx1     4096 1031 09:33 addons
drwxrwxr-x 2 lyx1 lyx1     4096 1031 09:33 cfg
-rwxrwxr-x 1 lyx1 lyx1 95768664 1031 09:36 cppcheck
-rwxrwxr-x 1 lyx1 lyx1  4190336 1031 09:34 dmake
drwxrwxr-x 2 lyx1 lyx1     4096 1031 09:33 platforms

编译后可以将程序路径添加到系统环境变量中,这样可以在系统的各个地方直接调用 cppcheck 命令

进入 profile文件修改设置环境变量

sudo vi /etc/profile

在profile文件末尾添加 cppcheck的程序路径,如:/home/root/app/cppcheck-2.12.0/build/bin

export PATH=/home/root/app/cppcheck-2.12.0/build/bin:$PATH

可以选择重启系统后一直有效

或者在使用的终端输入一下命令,给本次终端更新系统环境变量

source /etc/profile

2、Windows 安装

官网源码下载路径:http://cppcheck.net/
静态代码检测-cppcheck_第2张图片
下载后,按安装包顺序点击安装即可

3、Mac 安装

brew install cppcheck

选择重启系统后一直有效

或者在使用的终端输入一下命令,给本次终端更新系统环境变量

source /etc/profile

2、Windows 安装

官网源码下载路径:http://cppcheck.net/

[外链图片转存中…(img-MwVe0Cuw-1698910490138)]

下载后,按安装包顺序点击安装即可

3、Mac 安装

brew install cppcheck

你可能感兴趣的:(静态代码检查,c++)