浅层和深层静态分析有什么区别?我现在正在使用Xcode,并注意到有一个构建设置区分了两者。
我在一般情况下对此很好奇,我也想知道Clang如何实现这种区别有什么不同。
我尝试了一些Google-foo,我找不到答案。我尝试通过Apple和Clang文档来看看他们是否解释了但我没有找到任何东西。希望我没有错过一个明显的石头来推翻我的搜索。
答案 0 :(得分:3)
(1) 来自苹果公司的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;
在不深入研究代码的情况下,您会看到一个区别是(耗时的)程序间分析的停用......