2016-10-05 6 views
0

Au cours des 5 dernières années, j'ai utilisé Gnu Compiler Collection (gcc/g ++), donc je suis un débutant pour clang et je voudrais générer un graphique de flux de contrôle pour le code source C/Objective C/C++. Heureusement, j'ai lu here et here et découvert que je peux obtenir une représentation des blocs de base des relevés de source en utilisant les fonctions de classe CFG: CFG :: buildCFG() CFG :: dump()Comment extraire du code source un graphique de flux de contrôle en utilisant Clang?

qui est grand :), mais c'est encore peu clair pour moi comment puis-je obtenir le corps de la fonction sous forme AST et ASTContext avant de passer à buildCFG ??

Quelqu'un peut-il s'il vous plaît donner ici un court extrait qui montre comment puis-je exporter avec clang un CFG pour un code source donné?

Merci à tous

+0

Il serait très apprécié si quelqu'un pouvait bien vouloir me donner assistance/conseils, merci à tous – JammingThebBits

Répondre

1

j'ai pu générer les CFG en utilisant une méthode différente de celle que vous avez mentionné ci-dessus. Cela peut faire ce dont vous avez besoin. Commentez la ligne suivante (temporarily):

sys::fs::remove(Filename);

de la fonction ExecGraphViewer() à l'appui/GraphWriter.cpp et reconstruire clang.

Ensuite, exécutez l'outil d'analyse statique clang:

clang -cc1 -analyze -analyze-checker=debug.ViewCFG src_code.cpp 

En général, cette commande ouvrira une visionneuse graphique pour afficher votre CFG, lorsque vous avez terminé, il supprimera tous les fichiers .dot qu'il a créés pour voir. Mais si vous commentez cette ligne, vous pouvez copier ces fichiers ailleurs même après avoir fermé la visionneuse.

Assurez-vous qu'il rajouter ou bien il va probablement être vraiment grand ...

également ajouter que j'ai été aidé par Adam