快速入门:C/C++ 代码分析

可以通过常规地运行C 或 C++ 代码的代码分析以提高应用程序的质量。 代码分析可帮助发现常见问题和违反良好编程实践的行为。 另外,它可以找到难以通过测试发现的缺陷。 其警告不同于编译器错误和警告:它会搜索已知会导致问题的特定代码模式, 即,有效的但仍可能会给你或其他使用者造成问题的代码。

配置项目的规则集

  1. 在“解决方案资源管理器”中打开项目名称的快捷菜单,然后选择“属性”

  2. (可选)在“配置”和“平台”列表中,选择生成配置和目标平台

  3. 若要在每次使用所选配置生成项目时运行代码分析,请选中“生成时启用代码分析”复选框。 还可以手动运行代码分析,方法是打开“分析”菜单,然后选择“对 ProjectName 运行代码分析”或“对文件运行代码分析”

  4. 选择要使用的规则集,或创建自定义规则集。 如果使用 LLVM/clang-cl,请参阅在 Visual Studio 中使用 Clang-Tidy 来配置 Clang-Tidy 分析选项。

标准的 C/C++ 规则集

Visual Studio 包含以下本机代码标准规则集:

规则集 说明
C++ Core Check 算术规则 这些规则强制执行与 C++ Core Guidelines 中的算术运算相关的检查。
C++ Core Check 边界规则 这些规则强制执行 C++ Core Guidelines 的边界配置文件
C++ Core Check 类规则 这些规则强制执行与 C++ Core Guidelines 中的类相关的检查。
C++ Core Check 并发规则 这些规则强制执行与 C++ Core Guidelines 中的并发相关的检查。
C++ Core Check 常量规则 这些规则强制执行 C++ Core Guidelines 中的常量相关检查
C++ Core Check 声明规则 这些规则强制执行与 C++ Core Guidelines 中的声明相关的检查。
C++ Core Check 枚举规则 这些规则强制执行 C++ Core Guidelines 中的枚举相关检查
C++ Core Check 试验性规则 这些规则收集一些试验性检查。 我们预期这些检查最终将转移到其他规则集或完全被删除。
C++ Core Check 函数规则 这些规则强制执行与 C++ Core Guidelines 中的函数相关的检查。
C++ Core Check GSL 规则 这些规则强制执行与 C++ Core Guidelines 中的准则支持库相关的检查。
C++ Core Check 生存期规则 这些规则强制执行 C++ Core Guidelines 的生存期配置文件
C++ Core Check 所有者指针规则 这些规则强制执行与 C++ Core Guidelines 中的 owner<T> 相关的资源管理检查。
C++ Core Check 原始指针规则 这些规则强制执行与 C++ Core Guidelines 中的原始指针相关的资源管理检查。
C++ Core Check 规则 这些规则强制执行 C++ Core Guidelines 中的一部分检查。 使用此规则集可以包含除枚举和试验性规则集之外的所有 C++ Core Check 规则。
C++ Core Check 共享指针规则 这些规则强制执行与 C++ Core Guidelines 中具有共享指针语义的类型相关的资源管理检查。
C++ Core Check STL 规则 这些规则强制执行与 C++ Core Guidelines 中的 C++ 标准库相关的检查。
C++ Core Check 样式规则 这些规则强制执行与 C++ Core Guidelines 中的表达式和语句的使用相关的检查。
C++ Core Check 类型规则 这些规则强制执行 C++ Core Guidelines 的类型配置文件
C++ Core Check 唯一指针规则 这些规则强制执行与 C++ Core Guidelines 中具有唯一指针语义的类型相关的资源管理检查。
并发检查规则 这些规则强制执行 C++ 中的一组 Win32 并发模式检查。
并发规则 将 C++ Core Guidelines 中的并发规则添加到并发检查规则
Microsoft 本机最低要求规则 这些规则侧重于本机代码中的最关键问题,包括潜在安全漏洞和应用程序故障。 建议在为本机项目创建的任何自定义规则集中包含此规则集。
Microsoft 本机建议规则 这些规则侧重于本机代码中最关键和最常见的问题。 这些问题包括潜在安全漏洞和应用程序故障。 建议在为本机项目创建的任何自定义规则集中包含此规则集。 此规则集旨在与 Visual Studio Professional Edition 和更高版本一起使用。 它包括 Microsoft 本机最低要求规则中的所有规则

Visual Studio 包含以下托管代码标准规则集:

规则集 说明
Microsoft 基本正确性规则 这些规则侧重于在使用框架 API 时所犯的逻辑错误和常见错误。 包含此规则集可以扩展由最低建议规则报告的警告列表。
Microsoft 基本设计准则规则 这些规则侧重于强制实施最佳做法,以使代码易于理解和使用。 如果你的项目包含库代码,或者你想要强制实施易于维护的代码的最佳做法,请包含此规则集。
Microsoft 扩展的正确性规则 这些规则扩展了基本正确性规则,以最大程度地报告逻辑错误和框架使用错误。 这里特别强调特定方案,如 COM 互操作性和移动应用程序。 如果其中一个方案适用于你的项目或适用于查找项目中的更多问题,请考虑包含此规则集。
Microsoft 扩展的设计准则规则 这些规则扩展了基本设计准则规则,以最大程度地报告可用性和可维护性问题。 重点是命名准则。 如果你的项目包含库代码,或者你想要强制执行有关编写可维护代码的最高标准,请考虑包含此规则集。
Microsoft 全球化规则 这些规则侧重于导致应用程序中的数据在以不同语言、区域设置和区域性中使用时无法正确显示的问题。 如果你的应用程序已本地化和/或全球化,请包含此规则集。
Microsoft 托管的最低要求规则 这些规则侧重于代码分析结果最准确的代码中的最关键问题。 这些规则的数量很少,它们只能在有限的 Visual Studio 版本中运行。 将 MinimumRecommendedRules.ruleset 与其他 Visual Studio 版本一起使用。
Microsoft 托管的建议规则 这些规则侧重于代码中最关键的问题。 这些问题包括潜在安全漏洞、应用程序故障以及其他重要的逻辑和设计错误。 建议在为项目创建的任何自定义规则集中包含此规则集。
Microsoft 混合 (C++ /CLR) 最低要求规则 这些规则侧重于支持公共语言运行时的 C++ 项目中的最关键问题。 这些问题包括潜在安全漏洞、应用程序故障以及其他重要的逻辑和设计错误。 建议将此规则集包含在为支持公共语言运行时的 C++ 项目创建的任何自定义规则集中。
Microsoft 混合 (C++ /CLR) 建议规则 这些规则侧重于支持公共语言运行时的 C++ 项目中的最常见和最关键问题。 这些问题包括潜在安全漏洞、应用程序故障以及其他重要的逻辑和设计错误。 此规则集只能在 Visual Studio Professional Edition 和更高版本中使用。
Microsoft 安全规则 此规则集包含所有 Microsoft 安全规则。 包含此规则集可以最大程度地增加报告的潜在安全问题的数量。

包含每条规则:

规则集 说明
Microsoft 所有规则 此规则集包含所有规则。 运行此规则集可能会导致报告大量的警告。 使用此规则集可以全面了解代码中的所有问题。 它可以帮助你确定哪些有针对性的规则集最适合对项目运行。

运行代码分析

在“项目属性”对话框的“代码分析”页中,可将代码分析配置为在每次生成项目时都运行。 还可手动运行代码分析。

对解决方案运行代码分析:

  • 在“生成”菜单中,选择“对解决方案运行代码分析”

对项目运行代码分析:

  1. 在解决方案资源管理器中选择项目的名称。

  2. 在“生成”菜单上,选择“对 Project Name 运行代码分析”

若要对文件运行代码分析,请执行以下操作:

  1. 在解决方案资源管理器中选择文件的名称。

  2. 在“生成”菜单中,选择“对文件运行代码分析”或按 Ctrl+Shift+Alt+F7

    编译项目或解决方案,并运行代码分析。 结果将显示在“错误列表”窗口中。

分析和解决代码分析警告

“错误列表”窗口会列出已发现的代码分析警告。 结果显示在表格中。 如果提供了有关特定警告的详细信息,则第一列会包含一个展开控件。 选择该控件可以展开有关问题的更多信息的显示内容。 如果可能,代码分析会显示行号,并分析导致该警告的逻辑。

要查看有关警告的详细信息,包括问题的可能解决方法,请在“代码”列中选择警告 ID 以显示其相应的联机帮助文章。

双击警告以在 Visual Studio 代码编辑器中将光标移到导致警告的代码行。 或者,在所选的警告上按 Enter。

了解问题后,可在代码中解决该问题。 然后,重新运行代码分析以确保警告不再出现在错误列表中。

针对代码分析警告创建工作项

可以使用 Visual Studio 中的工作项跟踪功能来记录 bug。 若要使用此功能,必须连接到 Azure DevOps Server(以前称为 Team Foundation Server)的实例。

为一个或多个 C/C++ 代码警告创建工作项

  1. 在错误列表中展开并选择警告

  2. 在警告的快捷菜单中选择“创建工作项”,然后选择工作项类型

  3. Visual Studio 为选定的警告创建一个工作项,并在 IDE 的文档窗口中显示该工作项。

  4. 添加其他任何信息,然后选择“保存工作项”

搜索和筛选代码分析结果

可搜索冗长的警告消息列表,也可在多项目解决方案中筛选警告。

  • 按标题或警告 ID 筛选警告:在“搜索错误列表”框中输入关键字

  • 按严重性筛选警告:默认情况下,将为代码分析消息分配“警告”严重性。 在自定义规则集中,可将一个或多个消息的严重性分配为“错误”。 在“错误列表”的“严重性”列中选择下拉箭头,然后选择筛选器图标。 选择“警告”或“错误”以仅显示分配有相应严重性的消息。 选择“全选”以显示所有消息

另请参阅