首页 > 其他分享 >代码分析工具小结

代码分析工具小结

时间:2024-11-15 14:20:38浏览次数:1  
标签:功能 检查 代码 目录 工具 小结 下图

此文总结在平时开发过程中使用到的代码分析工具,分为静态分析和动态分析两个部分,本文只介绍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 这三款工具。

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

标签:功能,检查,代码,目录,工具,小结,下图
From: https://www.cnblogs.com/cherishui/p/18547895

相关文章

  • 网络乒乓测试工具
    一、工具介绍采用shell脚本和c/c++开发,用于评估多台主机间任意2台主机间的网络性能使用网络socket接口,建立客户端和服务端tcp网络连接,进行网络收发包测试测试可以指定收发报文数量和告警阈值  二、测试标准收发10w次报文,如果千兆网,耗时一般在20~50秒,如果是万兆网,耗......
  • 打卡信奥刷题(239)用C++工具信奥P1866 [普及组/提高] 编号
    编号题目描述太郎有NNN只兔子,现在为了方便识别它们,太郎要给他们编号。兔子们向太郎表达了它们对号码的喜好,每个兔子i......
  • 在 PowerShell 中,执行 ipconfig /flushdns 是清除本地 DNS 缓存的标准方式。PowerShel
    在PowerShell中,执行ipconfig/flushdns是清除本地DNS缓存的标准方式。如果你希望在PowerShell脚本中实时清理DNS缓存,你可以直接执行ipconfig/flushdns命令,并输出一些提示信息来确认操作已完成。PowerShell实时清理DNS缓存代码:powershellCopyCode#执行ipconf......
  • Sitecore debug 工具
    由于Sitecore的调试需要老是通过log来分析,而每次更新dll都需要等待一定的时间和重复执行前端的操作逻辑,特开发一个在线编辑器的方式来方便调试。警告:请勿在生产环境使用。截图构建项目打开Frontend,使用pnpmi安装依赖包,然后pnpmbuild:vite构建项目,之后去Backe......
  • 李沐《动手学深度学习》kaggle树叶分类(ResNet18无预训练)python代码实现
    前言    在尝试这个树叶分类之前,作者仅仅看完了ResNet残差网络一章,并没有看后面关于数据增强的部分,这导致在第一次使用最原始的ResNet18直接跑完训练数据之后的效果十分的差,提交kaggle后的准确仅有20%左右。本文最后依然使用未经预训练的手写ResNet18网络,但做了一定的......
  • 16年后微软的“古董”复活!开发者用C#重构经典VB6 IDE,网友:遗留的“屎山”代码有救了...
    http://ide.vb6.pro/ 出品|CSDN(ID:CSDNnews)C#发展多年以来,很多程序员喜欢用它来编写各种工具类软件。近日,向来奉行「TalkisCheap,Showmethecode」的程序员又开始了新一轮的“整活”,其中一位名为BartoszKorczynski的软件工程师心血来潮地用C#重建了16年前被微软废......
  • GIT 使用SSH 方式提交代码
    1.需求一般情况下,我们在提交代码的时候,使用HTTP的方式提交代码,这种方式有一个问题,提交时需要输入账号和密码,这个就不是很安全,git提供了SSH的方式。下面就实际操作一下如何使用ssh的方式提交代码。2.生成密钥对在windows下执行命令ssh-keygen-trsa-C邮箱地址一路回......
  • 发一段简洁大气的404纯代码错误页的模板,有需要的直接复制拿走
    ​ 分享一段简洁大气的404纯代码错误页的模板,有需要的直接复制拿走。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">......
  • 重磅!发表知网论文新规定出现,多个学报编辑部已经开始实施,大家注意!(文献管理学术助手这个
    重大通知:已经录用的论文需要提供所有参考文献的原文出处具体页面(含页码)的图片(拍照或者截图)。——多个知网期刊已经开始实施,特别是学报,凡是发表的文章,必须要提供参考文献的详细出处。话先放到这,最多3年,估计就会成为期刊社的普遍要求。PART.1其实特好理解,光是核对作者的参考......
  • 【安全工具】Web漏洞扫描十大工具(非常详细),零基础入门到精通,看这一篇就够了
    文章目录漏洞扫描十大工具AwVSNexposeOpenVASWebScarabWebInspectWhisker/libwhiskerBurpsuiteWiktoWatchfireAppScanN-StealthNmapp0fISSNessusXprobe文末福利漏洞扫描十大工具AwVSAwVS是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行......