Maison > développement back-end > C++ > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-16 18:35:03
original
729 Les gens l'ont consulté

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
Copier après la connexion

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    
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal