主要内容

Bug Finder 缺陷组

为方便起见,Bug Finder 中的缺陷检查项被分为多个组。

本主题概述了各种类型的群体。

C++ 异常

这些缺陷与 C++ 异常处理相关。这些缺陷包括:

  • noexcept 函数发出的未处理的异常

  • 在构造 throw 语句的参量对象时出现的意外异常

  • 按值而非按引用捕获异常的 catch 语句

  • 隐藏后续 catch 语句的 catch 语句

有关具体缺陷的更多详细信息,请参阅 C++ 异常缺陷

命令行参数: cpp_exceptions

并发

这些缺陷与多任务处理代码相关。

数据争用缺陷

当多个任务在共享变量上操作或调用未受保护的非重入标准库函数时,就会发生数据争用缺陷。

有关具体缺陷,请参阅并发性缺陷

命令行参数: concurrency

锁定缺陷

当临界区设置不当时,会发生锁定缺陷。例如:

  • 临界区陷入死锁。

  • 锁函数没有相应的解锁函数。

  • 在未调用解锁函数的情况下,锁函数被调用两次。

临界区保护共享变量免受并发访问。Polyspace® 期望临界区遵循一定的格式。临界区必须位于锁函数调用和解锁函数调用之间。

有关具体缺陷,请参阅并发性缺陷

命令行参数: concurrency

加密

这些缺陷与 OpenSSL 库中加密例程的用法不正确相关。例如:

  • 使用弱加密算法

  • 缺少基本元素,例如密钥或初始化向量

  • 加密运算的顺序不正确

请注意,这些检查项支持最高版本为 1.1.1 的 OpenSSL 库。

有关具体缺陷,请参阅加密缺陷

命令行参数: cryptography

数据流

这些缺陷是与信息在整个代码中的流动方式相关的错误。这些缺陷包括:

  • 死代码或不可达代码

  • 未使用的代码

  • 未初始化的信息

有关具体缺陷,请参阅数据流缺陷

命令行参数: data_flow

动态内存

这些缺陷是在动态分配内存的情况下与内存使用相关的错误。这些缺陷包括:

  • 释放动态分配的内存

  • 无保护内存分配

有关具体缺陷,请参阅动态内存缺陷

命令行参数: dynamic_memory

良好做法

通过这些缺陷,您可以了解良好的编码做法。这些缺陷本身可能不会导致程序崩溃,但它们有时会凸显出代码中更严重的逻辑错误。这些缺陷还会使代码容易受到攻击且难以维护。

这些缺陷包括:

  • 硬编码的常量,例如缓冲区大小和循环边界

  • 未使用的函数参数

有关具体缺陷,请参阅良好做法缺陷

命令行参数: good_practice

数值

这些缺陷是与代码中的变量及其值、数据类型以及用法相关的错误。这些缺陷包括:

  • 数学运算

  • 转换溢出

  • 运算溢出

有关具体缺陷,请参阅数值缺陷

命令行参数: numerical

面向对象

这些缺陷与 C++ 编程的面向对象的方面相关。这些缺陷会突出显示类设计问题或继承层次结构中的问题。

这些缺陷包括:

  • 构造函数中的数据成员未初始化或初始化不正确

  • 错误地覆盖基类方法

  • 数据封装损坏

有关具体缺陷,请参阅面向对象的缺陷

命令行参数: object_oriented

性能

这些缺陷检查项可检测直接导致或引发性能问题的特定代码模式。修复这些缺陷可直接消除性能问题,或者移除后续可能引发性能问题的潜在因素。

这些检查项可以识别编译器优化无法修复的缺陷。编译器优化仅尝试提升现有代码的性能,但必须严格遵守语言规则,且无法推测开发者意图。与之相反,这些检查项则可以检测到以下问题:

  • 存在更高效的代码模式:在不改变功能的前提下,可以用更高效的代码模式替代当前实现,但该模式并非语言规则所要求。

    例如,检查器会对类中没有移动构造函数或移动赋值运算符的空析构函数进行标记。C++ 语言规则允许使用空析构函数,但它会阻止移动运算符的自动生成。删除析构函数将允许编译器生成析构函数(和移动运算符),从而在不改变功能的情况下提高代码效率。

  • 存在两个或多个相似实现:开发人员可以根据具体需求选择更高效的实现方式。

    例如,检查项会标记 I/O 操作中使用 std::endl 的情况。std::endl\n 都可换行,但若无主动刷新需求,则后者效率更高。

在修复这些缺陷后,源代码的效率更高或开发者的意图更加明确,编译器也可以更积极地优化代码。

这些缺陷包括:

  • 无意中导致系统执行复制而非原本的移动操作的问题

  • 低效或不必要的临时变量创建

  • 使用的函数可能有更高效的替代方案

有关具体缺陷,请参阅性能缺陷

命令行参数: performance

编程

这些缺陷是与编程语法相关的错误。这些缺陷包括:

  • 赋值与相等运算符

  • 变量限定符或声明不匹配

  • 格式错误的字符串

有关具体缺陷,请参阅编程缺陷

命令行参数: programming

资源管理

这些缺陷与文件处理相关。这些缺陷包括:

  • 未关闭的文件流

  • 在文件流关闭后对其执行的操作

有关具体缺陷,请参阅资源管理缺陷

命令行参数: resource_management

静态内存

这些缺陷是在静态分配内存的情况下与内存使用相关的错误。这些缺陷包括:

  • 访问数组时越界

  • 空指针

  • 指针的转换

有关具体缺陷,请参阅静态内存缺陷

命令行参数: static_memory

安全

这些缺陷会突出显示代码中容易受到黑客攻击或其他安全攻击的地方。其中有很多不会导致运行时错误,但指出了代码中存在风险的区域。这些缺陷包括:

  • 管理敏感数据

  • 使用危险或过时的函数

  • 生成随机数

  • 从外部控制的路径和命令

有关具体缺陷的更多详细信息,请参阅 安全缺陷

命令行参数: security

被污染的数据

这些缺陷突出了代码中来自不安全源的元素。攻击者可以利用输入数据或路径攻击您的程序并导致故障。这些缺陷突出了代码中易受攻击的元素。缺陷包括:

  • 使用被污染的变量或指针

  • 外部控制路径

有关具体缺陷的更多详细信息,请参阅 被污染的数据缺陷。您可以使用可选命令 -consider-analysis-perimeter-as-trust-boundary 来修改被污染数据缺陷的行为。请参阅 -consider-analysis-perimeter-as-trust-boundary

命令行参数: tainted_data

另请参阅

主题