
Un graphe d'appels (également appelé multigraphe d'appels ) est un graphe de flux de contrôle [ qui représente les relations d'appel entre les sous-routines d'un programme informatique . Chaque nœud représente une procédure et chaque arête (f, g) indique que la procédure f appelle la procédure . Ainsi, un cycle dans le graphe indique des appels de procédures récursifs.
problème indécidable , les algorithmes de calcul de graphes d'appels statiques sont généralement des surapproximations. Autrement dit, chaque relation d'appel qui se produit est représentée dans le graphe, et éventuellement certaines relations d'appel qui ne se produiraient jamais lors d'une exécution réelle du programme.Les graphes d'appels peuvent être définis pour représenter différents degrés de précision. Un graphe d'appels plus précis approxime plus fidèlement le comportement du programme réel, au prix d'un temps de calcul plus long et d'une consommation de mémoire plus importante. Le graphe d'appels le plus précis est entièrement sensible au contexte , ce qui signifie que pour chaque procédure, le graphe contient un nœud distinct pour chaque pile d'appels avec laquelle cette procédure peut être activée. Un tel graphe est appelé une répartition dynamique (par exemple Java ou C++ ), des fonctions de première classe (par exemple Python ou Racket ) ou des pointeurs de fonction (par exemple C ), le calcul précis d'un graphe d'appels statique nécessite les résultats de l'analyse des alias . Réciproquement, le calcul précis des alias requiert un graphe d'appels. De nombreux systèmes d'analyse statique résolvent ce paradoxe apparent en effectuant les deux calculs simultanément.
Utilisations
Les graphes d'appels peuvent être utilisés de différentes manières. Une application simple consiste à identifier les procédures qui ne sont jamais appelées. Les graphes d'appels peuvent servir de documentation pour faciliter la compréhension des programmes . Ils peuvent également être utilisés pour détecter les anomalies d'exécution ou les attaques par injection de code.
Logiciel
Générateurs de graphes d'appels logiciels gratuits
Graphique des appels d'exécution (la plupart des outils listés sont des profileurs dotés de fonctionnalités de graphique des appels)
- gprof : inclus dans BSD ou faisant partie des utilitaires binaires GNU
- callgrind : partie de Valgrind
- KCachegrind : outil puissant pour générer et analyser des graphes d'appels à partir de données générées par Callgrind
- Moniteur d'activité sous macOS : Moniteur de processus avec interface graphique Apple. Le Moniteur d'activité intègre un générateur de graphes d'appels capable d'échantillonner les processus et de renvoyer un graphe d'appels. Cette fonction est uniquement disponible sous macOS Leopard.
- OpenPAT : inclut l’
control_flowoutil qui crée automatiquement une représentation graphique du graphe d’appels Graphviz à partir des mesures d’exécution. - pprof , outil open source de visualisation et d'analyse des données de profil, à utiliser conjointement avec gperftools .
- CodeAnalyst d' AMD (distribué sous licence GPL)
- makeppgraph est un générateur de graphes de dépendances (au niveau du module) pour les compilations effectuées avec Sourcetrail crée un graphe d'appels statique, que l'utilisateur peut explorer dynamiquement. Il prend également en charge Python et Java.
- doxygen : Utilise Graphviz pour générer des diagrammes statiques d'appels/d'héritage
- Cally : un outil qui utilise les fichiers RTL (Register Transfer Language) de GCC pour construire des graphes d'appels appelants ou appelés pour les projets C.
- cflow : GNU cflow est capable de générer le graphe d'appels direct et inversé d'un programme C
- egypt : un petit script Perl qui utilise gcc et Graphviz pour générer le graphe d'appels statique d'un programme C.
- Analizo : calcule les métriques du code source, génère des graphes de dépendances.
- CCTree : plugin Vim natif permettant d’afficher des graphes d’appels statiques à partir d’une base de données cscope . Fonctionne avec les programmes C.
- Codeviz : générateur statique de graphes d'appels (le programme n'est pas exécuté). Implémenté comme un correctif pour gcc ; compatible avec les programmes C et C++.
- calltree.sh : Fonctions shell Bash qui assemblent cscope, graphviz et un échantillon d'outils de rendu de points pour afficher les relations « appelant » et « appelé » au-dessus, en dessous et/ou entre les fonctions C que vous spécifiez.
- tceetree : comme calltree.sh, il connecte Cscope et Graphviz , mais c'est un exécutable plutôt qu'un script bash.
- Aller
- go-callvis : un générateur interactif de graphes d'appels pour les programmes Go dont la sortie peut être visualisée avec Graphviz
- Multilingue
- callGraph : générateur de graphes d'appels open-source pour AWK, Bash, BASIC, Dart, Fortran, Go, Lua, JavaScript, Julia, Kotlin, MATLAB, Perl, Pascal, PHP, Python, R, Raku, Ruby, Rust, Scala, Swift, TCL et TypeScript.
- .FILET
- NDepend est un outil d'analyse statique pour le code .NET. Il prend en charge de nombreuses métriques de code et permet la visualisation des dépendances à l'aide de graphes orientés et de matrices de dépendances.
- PHP, Perl et Python
- Devel::NYTProf : un analyseur de performances Perl et un générateur de graphiques d'appels
- phpCallGraph : un générateur de graphes d'appels pour les programmes PHP utilisant Graphviz . Il est écrit en PHP et requiert au minimum PHP 5.2.
- pycallgraph le 25 mai 2007 sur la Wayback Machine : un générateur de graphes d’appels pour les programmes Python qui utilise Graphviz .
- pyan : un générateur de graphes d'appels statiques pour les programmes Python qui utilise Graphviz .
- gprof2dot : Un générateur de graphes d'appels écrit en Python qui convertit les données de profilage de nombreux langages/environnements d'exécution en un graphe d'appels Graphviz .
- code2flow : Un générateur de graphes d'appels pour les programmes Python et JavaScript utilisant Graphviz
- rcviz : module Python permettant de visualiser des graphes d'appels générés à l'exécution avec Graphviz . Chaque nœud représente un appel de fonction, avec ses paramètres et sa valeur de retour.
- XQuery
- Graphiques d'appels XQuery tirés du wiki XQuery : Générateur de graphiques d'appels pour un module de fonction XQuery utilisant Graphviz
Générateurs de graphes d'appels propriétaires
- Banc d'essai LDRA
- Moteurs d'analyse statique et dynamique pour les logiciels hôtes et embarqués, avec une multitude de rapports incluant des graphiques d'appels.
- Expert visuel
- Analyseur de code statique et générateur de graphes d'appels pour les langages Oracle PL/SQL , SQL Server Transact-SQL , C# et PowerBuilder.
- Analyseur de performances Intel VTune
- Configuration du profileur pour afficher le graphe d'appels et les statistiques d'exécution
- Kit de réingénierie logicielle DMS
- Outil d'analyse de programmes personnalisable avec extraction statique du graphe d'appels global du programme pour C, Java et COBOL
Autres outils connexes
Exemple de graphique
Voici un exemple de graphique d'appels généré par l'auto-analyse de gprof :
Plus d articles de Worldlex Wiki
Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.
Explorer l index