CppCheck C++静态代码检查工具在Visual Studio(VS)下的配置和使用_Liber-coder的博客-程序员秘密

技术标签: 静态代码检查工具  

摘要

本文介绍如何在Visual Studio(VS)下使用CppCheck检查代码,包括安装和使用两个部分。与网上通过vs外部工具使用CppCheck的方法不同,本文介绍了CppCheck的vs插件,配置更方便,使用体验更好。


介绍

Cppcheck是一个C/C++代码的静态分析工具。与C++编译器和其他许多分析工具不同,Cppcheck不检测代码中的语法错误,只检测那些编译器通常无法检测到的bug类型,目的是只检测代码中真正的错误。下面是Cppcheck的一些检查项:

  • 检查边界溢出
  • 检查内存泄漏
  • 检查可能的空指针间接引用
  • 检查未初始化的变量
  • 检查无效的STL使用
  • 检查异常安全
  • 警告如果过时的或者不安全的函数使用
  • 警告未使用的或者冗余的代码
  • 检测各种潜在bugs的可疑代码等
    所有检查项可以查看这里:https://sourceforge.net/p/cppcheck/wiki/ListOfChecks/

CppCheck使用方法:

  1. 命令行调用
  2. 可视化界面使用
  3. 作为外部工具使用。若开发工具支持外部工具扩展,可手动配置为外部工具使用
  4. 作为插件使用。若开发工具包含CppCheck插件,可作为插件使用

本文使用第四重方法,通过插件使用CppCheck。 CppCheck在许多流行的开发工具上已经有对应插件,例如:Visual Studio、Code::Blocks、CLion 、QtCreator 、KDevelop 、Git (Linux)等,完整插件支持看这里:http://cppcheck.net/

安装

  1. 安装CppCheck
    CppCheck官网下载并安装, 本文下载的是cppcheck-1.87-x64-Setup.msi
  2. 接着安装vs插件
    cppcheck-vs-addin下载并安装vs插件,本文下载的是CppcheckPlugin_1.3.6.vsix
    注意: vs的CppCheck插件不包含CppCheck本身,因此需要先安装CppCheck再安装CppCheck的vs插件。详情见cppcheck-vs-addin的说明:

NOTE: The add-in does not deploy Cppcheck executable. Please, go to Cppcheck website, download the installer and install it before first use of the add-in. The add-in then may prompt for location of the cppcheck.exe.

  1. 安装完毕
    重启vs,安装完毕,接下来看如何使用。

使用

使用一段测试代码,测试一下CppCheck效果。

使用的测试代码:

int main()
{
    
	int array_temp[100];
	int a = array_temp[200];
}

测试结果:

  1. vs编译结果(编译通过,未提示错误):
    vs未检查出访问越界错误
  2. CppCheck结果:
    点击 工具 选择 Check current project with cppcheck
    vs使用CppCheck对代码静态分析
    检查出了编译器未检查出的访问越界错误:
    CppCheck检查出了数组访问越界错误

相关/参考链接

官网: http://cppcheck.net/
vs插件地址: https://github.com/VioletGiraffe/cppcheck-vs-addin
C++静态代码检查工具cppcheck在vs下安装与测试步骤: https://blog.csdn.net/qq_16783973/article/details/54907896
Poor Man’s Visual Studio Cppcheck Integration: http://avitebskiy.blogspot.com/2012/10/poor-mans-visual-studio-cppcheck.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a435262767/article/details/90137573

智能推荐

2018上C语言程序设计(高级)作业- 第2次作业_weixin_30410999的博客-程序员秘密

作业要求一提交截图:6-7: 6-8: 6-9: 7-1: 7-2: 7-3: 7-4: 7-5:作业要求二题目6-7删除字符中数字字符1、设计思路:(1)第一步:本题要求是删除字符中的数字字符,我的主要思路是通过数组遍...

Navigation修改版-避免生命周期重复回调_避免重复的生命周期调用_李四爷的博客-程序员秘密

本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货源码解析谷歌推出Navigation主要是为了统一应用内页面跳转行为。本文主要是根据Navigation版本为2.1.0 的源码进行讲解。'androidx.navigation:navigation-fragment:2.1.0' 'androidx.navigation:navigation-ui:2.1.0' 'androidx.navigation:navigation-fragment-kt.

kyeremal-bzoj2038-[2009国家集训队]-小z的袜子(hose)-莫队算法_weixin_34037515的博客-程序员秘密

bzoj2038-[2009国家集训队]-小z的袜子(hose)F.A.QsHomeDiscussProblemSetStatusRanklistContestModifyUser   ManacherLogout捐赠本站Notice:省选季快乐&另求历年World Fina...

c1xx : warning C4199: two-phase name lookup is not supported for C++/CLI, C++/CX, or OpenMP; use /Zc_c1xx : warning c4199: c++/cli、c++/cx 或 openmp 不支持两_李先生i的博客-程序员秘密

c1xx : warning C4199: two-phase name lookup is not supported for C++/CLI, C++/CX, or OpenMP; use /Zc:twoPhase-解决步骤:项目->属性->C/C+±>语言->符合模式:否

STM32----RTC实时时钟,随机数发生器和待机唤醒_码字但很菜的博客-程序员秘密

RTC实时时钟RTC是个独立的BCD定时器/计数器。RTC 提供一个日历时钟,两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC还包含用于管理低功耗模式的自动唤醒单元。 两个32位寄存器包含二进码十进制格式(BCD)的秒,分钟,小时(12或24小时制),星期几,日期,月份和年份。此外,还可以 提供二进制的亚秒值。 系统可以自动将月份的天数补...

go语言中pdf转图片功能的实现(CentOS)_go pkg/tools/pdf2pngtool.go:27:19: undefined: fitz_蜗牛^_^的博客-程序员秘密

一、centos下环境部署步骤1:部署ImageMagick(1)在http://www.imagemagick.org/download/上找到合适的版本,然后下载,我选择的版本是ImageMagick-6.9.9-36(2)解压刚才下载的文件: tar xvf  ImageMagick-6.9.9-36.tar.gz(3)进入解压目录:cd ImageMagick-6.9.9-36(4)检查配...

随便推点

禁止服务器的协议,Windows 服务器禁用 SSL 2 和 SSL 3 协议_浩彬老撕的博客-程序员秘密

[TOCM]一、前言首先说明一下,SSL 2 和 SSL 3 协议是两种过时的协议,原因是它们存在很严重的漏洞,所以我们要在服务端禁用 SSL 2 和 SSL 3 协议,以避免一些安全问题。SSL 2 协议:漏洞名为 DROWN(溺水攻击 / 溺亡攻击)。DROWN 漏洞可以利用过时的 SSL 2 协议来解密与之共享相同 RSA 私钥的 TLS 协议所保护的流量。SSL 3 协议:漏洞名为 POO...

CentOS7.5部署DNS(访问)_centos7.5配置dns_发现美的眼睛的博客-程序员秘密

CentOS7.5部署DNS(访问、主从、分离解析)今天,带给大家一期linux运维分享。从题目中可得,本人分享一下CentOS7.5的部署经历。一句话总结,坑多路少,测试成功和娶老婆一样激动。=  =测试环境:CentOS7.5 全部都是IP设置: ↓   ↓   ↓主服务器——192.168.10.1从服务器——192.168.10.2客户机——192.168.10.3...

Java基础教程——File类、Paths类、Files类_weixin_30411239的博客-程序员秘密

File类File类在java.io包中。io代表input和output,输入和输出。代表与平台无关的文件和目录。可以新建、删除、重命名,但不能访问文件内容。File类里的常量:import java.io.File;public class TestFileConst { public static void main(String[] args) { ...

Android系统Surface机制的SurfaceFlinger服务的线程模型分析_qq160816的博客-程序员秘密

在前面两篇文章中,我们分析了SurfaceFlinger服务的启动过程以及SurfaceFlinger服务初始化硬件帧缓冲区的过程。从这两个过程可以知道,SurfaceFlinger服务在启动的过程中,一共涉及到了三种类型的线程,它们分别是Binder线程、UI渲染线程和控制台事件监控线程。在本文中,我们就将详细分SurfaceFlinger服务的线程模型,即上述三种类型的线程是如何运行和交互的。

Linux-C语言函数手册_rockyvogue的博客-程序员秘密

在网上找到了一个比较好的linux-c的api文档1. 字符测试函数2. 字符串操作3. 内存管理函数4. 日期与时间函数5. 数学函数6. 文件操作函数7. 进程管理函数8. 文件权限控制9. 信号处理函数10. 接口处理函数11. 环境变量函数12. 终端控制函数...

推荐文章

热门文章

相关标签