代码分析工具小结

news/2024/12/28 11:38:25/文章来源:https://www.cnblogs.com/cherishui/p/18547895

此文总结在平时开发过程中使用到的代码分析工具,分为静态分析和动态分析两个部分,本文只介绍Windows平台的工具。

静态代码分析

CppCheck

CppCheck是一款经典的C/C++静态代码检查工具,笔者最开始使用的检查工具,帮助检查出了许多潜在缺陷,推荐首选,当前最新版本为 2.16.0.

下面介绍下笔者的使用经验,该工具主界面如下:

image.png

最常用的是分析->目录功能,再点击查看->全部展开,工具栏上有不同警告级别的图标,可依次过滤查看。

在感兴趣的条目上,右键可支持直接打开、隐藏选中的Id等功能,方便快捷查看检查报告。

该软件还有付费版本 [Cppcheck Premium]( www.cppcheck.com ),支持更多检测规则和规范。

TscanCode

这是腾讯出品的一款静态分析软件TscanCode,支持C/C++、C#、Lua等代码。

在笔者的平时使用感受中,不如CppCheck,检查出来的问题一般般。

下图给软件界面:

image.png

PVS-Studio

这款分析软件是最近上手使用的,虽说是商业软件,但对个人开发者、教育教学等人员还是友好的。

免费使用的前提是在源代码开头加上特定注释,可在 how-to-use-pvs-studio-free 上下载工具,一键增加注释。

在工程实践中,推荐建立两个目录,一个开发目录,一个检查目录。在检查目录应用上述工具更新代码仓库,同时通过git同步最新更改,找到疑似问题,在开发目录中增加断点用于标注,在实际运行中校验正确与否,在开发目录中更改提交,同步改动到检查目录中,这样让主线开发和静态检查两不误。

在工程实践中,优先检查高级别的警告。属于自己负责的模块,可自己修改,属于别人负责的模块,可告知别人修改。

这款工具能检查出来的错误较多,配合Cppcheck一起使用,效果更好。

动态代码检测工具

DrMemory

DrMemory是一款跨平台的动态内存调试工具。

为了更好进行检测,需要开启调试信息、关闭内联扩展、禁用帧指针优化等操作。

image.png

在使用时遇到无法启动的错误,就此作罢。

Sanitizer

Visual Studio2019.16.9 版本中引入的 AddressSanitizer工具(以下简称ASan),它可以发现下列内存问题:

  • 分配/释放不匹配,新建/删除类型不匹配
  • 双重释放、释放后使用
  • 全局变量溢出、堆栈缓冲区溢出
  • 超出作用域使用堆栈

该功能兼容x86和x64所有级别的优化和配置,但与 编辑并继续、增量链接和 /RTC 不兼容。

下图为关闭 编辑并继续 功能入口:

image.png

下图为 关闭增量链接 的两个功能入口:

image.png

image.png

下图为 关闭RTC检查 功能入口:

image.png

完成上述前置环境准备后,通过下图配置,开启VS的AddressSanitizer功能:

image.png

完成上述设置后,启动测试程序,提示如下:

image.png

在这里找到原因,本机Win7系统的Kernel32.dll不包含PssQuerySnapshot这个函数,这个函数是Windows 8.1才引进的。

鉴于本地开发环境和系统限制,针对此工具的使用,暂且放一放。

Memory Validator

Memory Validator是一款动态内存检查工具,可在官网下载30天的试用版。它具备以下功能:

  • 检测内存泄漏和句柄泄漏
  • 支持原生模式、.Net以及混合模式应用
  • 检查双重删除/释放、对已删除对象的调用以及相关内存错误

此项功能与 VLD 的内存检测功能有冲突,因此,在启动时,需要去掉对 VLD 的引用。

运行很简单,见下图:

image.png

一路next启动程序,正常执行相关操作后,最后退出程序,等待它收集数据后,就自己看着整理修改。

小结

本文总结了在日常工作中用到的静态/动态代码分析工具,推荐使用PVS-StudioCppcheckMemory Validator 这三款工具。

优先更正确定性高的错误和缺陷,对于不那么重要的问题,可先放一放。注意,不是自己负责的错误,不要擅自改动,给别人指出来就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834026.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成为行动上的巨人

总是看到别人的微博,有学习到,有被感到到,有醍醐灌顶到,也有被大开脑洞的时候。今天有了自己的博客,记录学习中的点点滴滴,也希望自己不再是只在知识的边缘磨磨蹭蹭, 而是挖掘进去,进而能够知其然又知其所以然。希望笔记成为自己知识的沉淀和积累,也希望 能够帮助到那…

a-modal打开页面报错Ancestor with aria-hidden

报错信息Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which w…

线程状态切换

Java线程控制方法的作用及其区别:start:作用:启动线程,由虚拟机自动调度执行run()方法。 区别:线程处于就绪状态。run:作用:线程逻辑代码块处理,JVM调度执行。 区别:线程处于运行状态。sleep:作用:让当前正在执行的线程休眠(暂停执行)。 区别:不释放锁。wait:作用:…

AI智能检测视频分析网关安全帽检测识别监控解决方案

在当代建筑行业中,保障工人的安全始终是最为紧迫的议题。事故如高空坠落和物体撞击等频繁发生,严重威胁着工人的生命安全。安全帽作为一项基础的个人防护设备,其正确使用对于减轻事故伤害起着至关重要的作用。 不过,依赖传统的人工检查方法不仅效率不高,还可能存在疏漏和错…

制造企业的数字化转型:五款优秀项目管理软件推荐

制造业的生产管理往往涉及复杂的流程和多部门协作,如何确保各环节顺利对接、信息准确传递,是每一家制造企业都在不断优化的问题。面对这些管理难题,越来越多的制造企业引入了项目管理软件,通过直观的任务分配、进度跟踪、数据反馈等功能,极大地提升了生产效率和团队协作质…

React Router 的实现原理

本文分两部分,一说前端路由的基本原理,二说 React Router 的实现原理 前端路由的基本原理​ 不说屁话,从时间线上讲,Web 应用原本是后端渲染,后来随着技术的发展,有了单页面应用,慢慢从后端渲染发展成前端渲染 在博客前端路由hash、history的实现 一问中我已经介绍过这两…

[TJOI2007] 路标设置

[[TJOI2007] 路标设置(https://www.luogu.com.cn/problem/P3853) 题目 B 市和 T 市之间有一条长长的高速公路,公路上相邻路标的最大距离定义为该公路的“空旷指数”。现在公路上增设一些路标,使得公路的“空旷指数”最小。请设计一个程序计算能达到的最小值是多少。请注意,公…

TBM810-ASEMI贴片桥堆8A 1000V

TBM810-ASEMI贴片桥堆8A 1000V编辑:ll TBM810-ASEMI贴片桥堆8A 1000V 型号:TBM810 品牌:ASEMI 封装:TBM-4 特性:贴片桥堆 正向电流:8A 反向耐压:1000V 恢复时间:>2000ns 引脚数量:4 芯片个数:4 芯片尺寸:50MIL 浪涌电流:50A 漏电流:>10uA 工作温度:-55℃~150…

Python开发环境搭建(PyCharm+Anaconda+Git+Gitee)

一、Anaconda介绍 1.1 为什么选择Anaconda? Anaconda是一个开源的Python发行版本,主要用于数据科学和机器学习,它包含了Python、conda以及众多工具和库,让我们可以轻松的构建和管理python虚拟环境,方便的进行python项目开发。下面是选择Anaconda的理由:安装简单方便 便捷…

Visual Studio 快速分析 .NET Dump 文件

前言 在开发和维护 .NET 应用程序的过程中,有时会遇到难以捉摸的性能瓶颈或内存泄漏等问题。这些问题往往发生在生产环境中,难以复现。为了更准确地诊断这些运行时问题,通常会收集应用程序在生产环境中的内存转储文件(.dump 文件)。在这种情况下,分析内存转储文件(.dump…

使用model-viewer加载glb文件

实现效果代码 react项目引入方式可选其一1.在html中引入 <script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"></script>npm 或者 yarn安装yarn add @google/model-viewerindex.jsimport React, { …

关于定时器周期、频率等相关计算

1、定时器作为计数器,时钟频率计算如下图: 2、定时器产生一次更新中断时间计算,如下: 当定时器设置为边沿对齐模式和向上计数模式时,定时器计数到重装载值(arr)产生一次中断,产生一次中断的时间为: 其中:T为定时器周期,也为此处产生一次中断的时间;arr为重装载值…