深度静态分析和浅层静态分析有什么区别?
What's the difference between deep and shallow static analysis?
浅层静态分析和深层静态分析有什么区别?我现在正在使用 Xcode,并注意到有一个构建设置可以区分两者。
我对一般情况下的这个很好奇,我也想知道 Clang 实现这种区别的方式是否有任何不同。
我尝试了一些 Google-foo,但找不到答案。我尝试浏览 Apple 和 Clang 文档,看看他们是否对此进行了解释,但我没有找到任何东西。希望我在搜索过程中没有错过明显的推翻石头。
(1)
来自 apple 的 Evan Cheng(编译技术)的 talk 给出了指示(参见第 157/158 页):
- 浅 - 快速分析
- 深入——更透彻的分析
推荐:Always analyze in deep mode as part of qualifications
(2)
您可以在 analyzerOptions 的源代码中找到更多详细信息
有 UserModeKind 变量:
00184 /// \brief Describes the kinds for high-level analyzer mode.
00185 enum UserModeKind {
00186 UMK_NotSet = 0,
00187 /// Perform shallow but fast analyzes.
00188 UMK_Shallow = 1,
00189 /// Perform deep analyzes.
00190 UMK_Deep = 2
00191 };
00192
00193 /// Controls the high-level analyzer mode, which influences the default
00194 /// settings for some of the lower-level config options (such as IPAMode).
00195 /// \sa getUserMode
00196 UserModeKind UserMode;
00197
00198 /// Controls the mode of inter-procedural analysis.
00199 IPAKind IPAMode;
无需深入研究代码,您就会发现一个区别是停用了(耗时的)过程间分析...
浅层静态分析和深层静态分析有什么区别?我现在正在使用 Xcode,并注意到有一个构建设置可以区分两者。
我对一般情况下的这个很好奇,我也想知道 Clang 实现这种区别的方式是否有任何不同。
我尝试了一些 Google-foo,但找不到答案。我尝试浏览 Apple 和 Clang 文档,看看他们是否对此进行了解释,但我没有找到任何东西。希望我在搜索过程中没有错过明显的推翻石头。
(1) 来自 apple 的 Evan Cheng(编译技术)的 talk 给出了指示(参见第 157/158 页):
- 浅 - 快速分析
- 深入——更透彻的分析
推荐:Always analyze in deep mode as part of qualifications
(2) 您可以在 analyzerOptions 的源代码中找到更多详细信息 有 UserModeKind 变量:
00184 /// \brief Describes the kinds for high-level analyzer mode.
00185 enum UserModeKind {
00186 UMK_NotSet = 0,
00187 /// Perform shallow but fast analyzes.
00188 UMK_Shallow = 1,
00189 /// Perform deep analyzes.
00190 UMK_Deep = 2
00191 };
00192
00193 /// Controls the high-level analyzer mode, which influences the default
00194 /// settings for some of the lower-level config options (such as IPAMode).
00195 /// \sa getUserMode
00196 UserModeKind UserMode;
00197
00198 /// Controls the mode of inter-procedural analysis.
00199 IPAKind IPAMode;
无需深入研究代码,您就会发现一个区别是停用了(耗时的)过程间分析...