PVS‑Studio 8.00 for macOS, Linux & Windows - 代码质量安全静态分析

PVS‑Studio 8.00 for macOS, Linux & Windows - 代码质量安全静态分析

PVS‑Studio - 代码漏洞扫描工具 | 静态代码测试 | 代码安全分析

请访问原文链接:https://sysin.org/blog/pvs-studio/ 查看最新版。原创作品,转载请保留出处。

作者主页:sysin.org


摘要:PVS-Studio 8 这一重大版本引入了针对 JavaScript、TypeScript 和 Go 的新分析器。新增的 WebStorm 和 GoLand 插件可直接在 IDE 中使用这些分析器。Visual Studio Code 扩展也进行了大幅更新,现在支持 PVS-Studio 涵盖的所有编程语言。

PVS-Studio 徽标:酷炫的独角兽

C、C++、C# 和 Java 代码静态分析器

PVS‑Studio 是一款静态分析器,可保护代码质量、安全性 (SAST) 和代码安全

何时需要使用 PVS‑Studio 分析仪

对于开发者

  • 开发过程中偶尔会出现错误
  • 搜索错误时的调试工作很耗时
  • 错误会进入版本控制系统
  • 一旦错误被QA专家发现,调试那段代码将变得困难

对于管理者

  • 由于存在bug,需要频繁地回到旧任务中
  • 用户报告产品中存在错误
  • 即使招聘了更多的开发者 (sysin),也发现代码质量在下降
  • 随着代码量的增加,很难评估其质量和可靠性

对于安全专业人士

  • 外部代码审计困难
  • 潜在客户要求使用这类工具
  • 客户要求在开发中遵守安全和可靠性标准

新增功能

PVS-Studio 8.00 更新内容

发布日期:2026 年 8 月 19 日

  • PVS-Studio 8 这一重大版本引入了针对 JavaScript、TypeScript 和 Go 的新分析器。新增的 WebStorm 和 GoLand 插件可直接在 IDE 中使用这些分析器。Visual Studio Code 扩展也进行了大幅更新,现在支持 PVS-Studio 涵盖的所有编程语言。
  • 现在使用基于 TOML 的新配置文件格式来配置新分析器、新 IDE 插件以及更新后的 Visual Studio Code 扩展。详情请参阅相关文档。
  • 持续扩展对 MISRA C++ 2023 的覆盖范围。MISRA 组中现有的 16 条诊断规则已适配 MISRA C++ 2023 标准。有关 MISRA 支持的更多信息,请参阅相关文档。
  • C 和 C++ 分析器现在支持 Linux 上的 x86_64-pc-linux-gnu-c++ 编译器。此外,在编译监控和编译跟踪模式下新增对 TI C2000-CGT 编译器的支持。
  • PVS-Studio 插件现已支持 Qt Creator 20.x。已停止支持 Qt Creator 14.x。我们计划通过支持每个 Qt Creator 版本发布后两年内的最新插件版本来维持向后兼容性。
  • Java 分析器现在可以正确处理使用 sourceSets 的复杂构建结构项目。
  • 新日志系统的实现工作正在进行中,旨在简化 PVS-Studio 分析器运行过程中出现的问题的数据收集 (sysin)。目前 C++ 分析器和 MSBuild C# 项目已支持扩展日志记录。详情请参阅相关文档。
  • [重大变更] 对于 Unreal Engine 项目,.pvsconfig 文件中的 //V_USE_OLD_PARSER 标志现在会被忽略。新的 C++ 解析器已经足够完善,现已建议作为所有分析项目的默认解析器。现在,即使较旧版本的 Unreal Engine 项目的引擎源代码中仍包含 //V_USE_OLD_PARSER 标志,也会默认使用新的 C++ 解析器。
  • [重大变更] Java 分析器现在会对 suppress 文件的内容进行排序。此次更新不会影响分析结果,但下次更新受版本控制的 suppress 文件时,可能会导致文件内容发生较大变化。
  • [重大变更] 诊断规则 V2558 和 V547 针对特定情况更新了提示信息。此前被抑制的警告可能会重新出现在分析报告中。
  • [重大变更] 由于 Visual Studio Code 扩展进行了重大修改以支持新的 PVS-Studio 分析器,使用该扩展所需的最低 Visual Studio Code 版本从 1.74(2022 年 11 月)提升至 1.100(2025 年 4 月)。
  • V6136。位标志的值重复。
  • V5801。OWASP。代码包含可能改变其逻辑的不可见字符。建议在代码编辑器中启用不可见字符显示。
  • V5901。OWASP。代码包含可能改变其逻辑的不可见字符。建议在代码编辑器中启用不可见字符显示。
  • V7001。二元运算符的操作数相同。
  • V7002。一个函数的函数体与另一个函数的函数体完全相同。
  • V7003。条件与 else if 语句中的条件相同,导致该语句无法执行。
  • V7004。then 语句与 else 语句相同 (sysin)。
  • V7005。变量被赋值给自身。
  • V7006。创建了异常但从未使用。可能缺少 throw 关键字。
  • V7007。|& 运算符绕过短路求值。即使左操作数为 false,右操作数仍会被求值。
  • V7008。两个或多个 case 分支执行相同的操作。
  • V7009。函数、构造函数或方法中的参数未被使用。
  • V7010。函数的返回值必须被使用。
  • V7011。与 NaN 的比较不正确。应改用 isNaN()Number.isNaN() 方法。
  • V7012。条件表达式始终返回相同的值。
  • V7013。条件中存在可疑赋值。可能原本 intended 是进行比较。
  • V7014。复合赋值运算符左右两侧的表达式相同。
  • V7015。赋值运算符和一元运算符的格式可疑。
  • V7016。在循环中通过常量索引访问集合元素存在可疑情况。
  • V7017。内部循环中未使用循环计数器进行集合索引。
  • V7018。表达式 A || (A && B) 是冗余的,其结果始终为 A
  • V7019。同一个变量被用作内部循环和外部循环的计数器。
  • V7020。代码格式可疑。可能缺少花括号。
  • V7021。后缀递增或递减操作没有效果,因为变量随后被覆盖。
  • V7022。此 else 分支可能应该属于前一个 if 语句。
  • V7023。在相似代码片段中可疑地使用了某个变量。可能存在拼写错误,原本可能 intended 使用另一个变量。
  • V7024。在一系列相似比较中存在可疑的子表达式。
  • V7025。后续条件中可能应该检查某个已赋值的变量。请检查是否存在拼写错误。
  • V7026。ifforwhile 语句条件后存在多余的分号。
  • V7027。对象作为参数传递给了自身的方法。
  • V7028。使用了用户定义的数学常量,而不是内置常量。由此产生的值可能不准确。
  • V7029。该行可能未被正确注释,导致控制流发生改变。
  • V7030。代码格式可疑。可能缺少 else 关键字。
  • V7031。在 switch 语句中发现可疑标签。可能存在拼写错误,原本可能 intended 使用另一个标签。
  • V7032。循环计数器与其自身的初始值进行比较 (sysin)。
  • V7033。存在可疑的相似比较。表达式中可能存在拼写错误。
  • V7034。子类中的方法没有重写或实现祖先类的方法。子类方法名称可能存在拼写错误。
  • V7035。属性实现可疑。可能应该返回或赋值给另一个字段。
  • V7036。存在可疑的精确比较。考虑使用具有指定精度的比较。
  • V7037。嵌套循环的计数器使用外部循环的计数器进行初始化。
  • V7038。循环条件可能不正确。循环的条件和更新表达式使用了不同的变量。
  • V7039。检测到无法到达的代码。控制流永远不会执行到此语句。
  • V7040。检测到无限递归。
  • V8001。foo 运算符左右两侧的子表达式相同。
  • V8002。变量被赋值给自身。
  • V8003。建议检查该表达式。此处可能应该使用 -=``、+=!=` 中的某个运算符。
  • V8004。检测到 if A {...} else if A {...} 模式。可能存在逻辑错误。
  • V8005。then 语句与 else 语句相同。
  • V8006。循环中存在无条件的 break/continue/return/goto
  • V8007。在未延迟执行的匿名函数中调用 recover 函数无法从 panic 中恢复执行。
  • V8008。在循环中通过常量索引访问集合元素存在可疑情况。
  • V8009。两个或多个 case 分支执行相同的操作。
  • V8010。两个或多个 case 分支具有等效表达式。
  • V8011。复合赋值运算符左右两侧的表达式相同。
  • V8012。函数始终返回相同的值。请检查程序逻辑。
  • V8013。格式不正确。预期的格式项数量不同。
  • V8014。两个 if 语句具有相同的条件。第一个 if 语句包含函数返回操作,使第二个 if 语句变得多余,或者代码中存在逻辑错误。
  • V8015。对位运算 XOR 运算符 ^ 的使用可疑。此处可能原本 intended 使用幂运算。
  • V8016。循环可能执行不正确,或者其条件永远无法满足。请检查 for 循环的初始值和最终值。
  • V8017。两个相邻 if 语句的条件相同。
  • V8018。与 math.NaN() 的比较没有意义。应改用 math.IsNaN() 函数。
  • V8019。case 表达式列表中指定了两个或多个等效表达式。
  • V8020。重复检查。该条件已在前一行进行验证。
  • V8021。多次使用一元运算符没有意义,或者会反转结果。
  • V8022。函数或方法中的参数未被使用。
  • V8023。可能检查了错误的 error 类型变量是否为 nil
  • V8024。冗余的类型断言。变量的类型已经包含通过类型断言检查的类型。
  • V8025。类型 switch 中的 case 无法到达。之前的 case 已经涵盖了此类型。
  • V8026。嵌套循环的循环计数器未在循环体中使用。
  • V8027。在一系列相似比较中存在可疑的子表达式。
  • V8028。外部循环计数器在内部循环的后置语句中被修改。内部循环可能应该修改内部循环计数器。
  • V8029。外部循环计数器用于内部循环的条件。内部循环可能应该使用内部循环计数器。
  • V8030。外部循环计数器用于内部循环的初始化语句。可能应该使用其他变量作为计数器。
  • V8031。使用 len 函数调用结果作为索引将导致越界一位(off-by-one)错误。
  • V8032。函数的返回值必须被使用。
  • V8033。发现两个相似的代码片段。第二个代码片段可能包含拼写错误。
  • V8034。传递给函数的参数顺序可能不正确。
  • V8035。类型断言始终为 false。检查类型断言中使用的接口,因为它们包含签名不兼容的方法。
  • V8036。与无符号类型变量进行的比较没有意义。
  • V8037。同一个参数被多次传递给函数。可能原本 intended 使用不同的参数。
  • V8038。参数在函数体中使用之前始终会被重新赋值。
  • V8039。用于标识元素的值中存在可疑的前导或尾随空格。
  • V8040。变量的值在使用之前已被覆盖。

更多细节请参阅官方文档。

下载地址

小版本更新仅保留最新版。

PVS‑Studio 8.00 for macOS (2026-08-19)

PVS‑Studio 8.00 for Linux (2026-08-19)

PVS‑Studio 8.00 for Windows (2026-08-19)

更多:HTTP 协议与安全

posted @ 2026-08-20 11:37  sysin  阅读(2)  评论(0)    收藏  举报