数据流分析(DFA)跟踪代码中数据的流动并基于此分析检测潜在问题。例如,DFA检查可以识别始终为假或始终为真的条件、无限循环、缺失的返回语句、无限递归以及其他潜在的漏洞。

1.png

在CLion中的数据流分析具有调用上下文敏感性:

  • 每个函数都会分别针对每个调用站点进行分析。
  • 不同调用站点的参数和返回值也会分别进行分析。

DFA可以全局工作(将程序的整个翻译单元作为分析的单个单元)或局部工作(在单个函数内部进行分析)。

全局DFA在翻译单元内的所有函数或字段的所有用法上进行工作,这些函数或字段被保证在其中是本地的。这有助于检测局部DFA无法捕获的潜在问题。

例如,使用全局DFA进行悬挂指针分析可以捕获在另一个函数中删除内存的情况:

2.png

CLion的静态分析器根据Herb Sutter的生命周期安全提案检查对象的生命周期。然而,目前并未涵盖提案中提到的所有情况。

在CLion中,默认情况下启用了全局DFA,但在以下情况下会回退到局部模式:

  • 翻译单元中的任何函数中存在错误,由Clangd报告。
  • 文件包含在另一个翻译单元中。
  • 通过注册表键clion.dfa.global手动禁用全局DFA(除非面临严重的退行问题,否则不建议这样做)。

一些DFA检查可以在全局和局部两种情况下工作,而以下三种仅在全局DFA中可用:Constant function result(常量函数结果)、Constant parameter(常量参数)和Unreachable calls of function(无法访问的函数调用)。

标签: clion破解, clion破解教程, clion教程, clion基础教程, clion高级教程, clion核心教程, clion免费激活码, clion免费注册码, clion注册码在线生成, clion激活