Maison  >  Article  >  développement back-end  >  Comment générer un graphique d'appel pour le code C afin d'analyser les chemins d'exécution ?

Comment générer un graphique d'appel pour le code C afin d'analyser les chemins d'exécution ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-16 18:35:03730parcourir

How to Generate a Call Graph for C   Code to Analyze Execution Paths?

Génération d'un graphique d'appel pour le code C

Cet article explore les techniques permettant de créer un graphique d'appel pour le code C, en particulier lorsque l'on tente d'identifier tous chemins d'exécution possibles menant à une fonction spécifique.

Créer un appel Graphique

Pour répondre à ce besoin, une approche consiste à tirer parti du pipeline d'optimisation LLVM. Ceci peut être réalisé en compilant le code avec les indicateurs -S et -emit-llvm, suivis des options -analyze et -dot-callgraph via l'outil opt. Par exemple :

$ clang++ -S -emit-llvm main1.cpp -o - | opt -analyze -dot-callgraph
$ dot -Tpng -ocallgraph.png callgraph.dot

Cette commande génère un graphique d'appel qui représente les chemins d'exécution potentiels, représentés sous forme de diagramme visuel.

Personnalisation de la représentation du graphique d'appel

Dans certains cas, il peut être avantageux de post-traiter le graphique d'appel pour améliorer la lisibilité. Une méthode consiste à utiliser c filt pour obtenir des noms de fonctions et de classes non mutilés. L'exemple suivant illustre ce processus :

$ clang++ -S -emit-llvm main1.cpp -o - |
   opt -analyze -std-link-opts -dot-callgraph
$ cat callgraph.dot |
   c++filt |
   sed 's,>,\>,g; s,-\>,->,g; s,<,\<,g' |
   gawk '/external node/{id=}  != id' |
   dot -Tpng -ocallgraph.png    

En appliquant ce graphique modifié, il devient plus facile d'identifier les fonctions et classes spécifiques impliquées dans chaque chemin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn