2015-04-14 1 views
5

Quelle est la différence entre une analyse statique superficielle et profonde? J'utilise Xcode pour le moment, et j'ai remarqué qu'il y a un réglage de construction qui distingue les deux. Je suis curieux à ce sujet dans le cas général, et je me demande également s'il y a une différence dans la façon dont Clang implémente cette distinction.Quelle est la différence entre une analyse statique profonde et superficielle?

J'ai essayé Google-foo et je n'ai pas trouvé de réponse. J'ai essayé de passer par les docs Apple et Clang pour voir s'ils l'expliquaient mais je n'ai rien trouvé. Espérons que je n'ai pas manqué une pierre évidente à renverser dans ma recherche.

Xcode screenshot of the deep & shallow static analysis options

+0

Une analyse statique précise est un problème difficile - je suppose que Deep signifie simplement que l'analyseur fonctionne plus fort (ce qui rend l'analyse plus lente et gourmande en ressources, mais il y aura plus de vrais positifs et/ou moins de faux négatifs). – HairyFotr

Répondre

3

(1) A talk de Evan Cheng (tech de compilation) de pomme donne une indication (voir pages 157/158):

  • peu profonde - analyse rapide
  • profond - plus analyse approfondie

Recommandation: Always analyze in deep mode as part of qualifications

(2) Quelques détails vous pouvez trouver dans le code source du analyzerOptions Il y a la variable 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; 

Sans regarder trop profondément dans le code que vous voyez qu'une différence est la désactivation l'analyse inter-procédurale (temporelle) ...

+0

Pouvez-vous fournir d'autres différences? – whoKnows