Calltree

, par MiKaël Navarro

Un jour j’avais un besoin, trouver les chemins entre un appel de fonction et un autre ..?

J’ai effectué des recherches sur Google mais rien ne satisfaisait mes besoins.

J’ai bien trouvé Egypt qui se base sur les dump RTL de gcc (qui présente une représentation du code plus facile à analyser) et GraphViz pour visualiser le graphe d’appel, mais je ne voulais pas être dépendant de gcc. De même pour CodeViz qui est dépendant d’une version patché de gcc.

Une autre approche aurait été d’utiliser l’analyseur lexical flex couplé avec l’analyseur syntaxique Bison, mais ma solution, plus simple, fut de créer mon propre script autour de l’outil cscope permettant d’analyser les appelants et les fonctions appelés :

calltree.py

qui génère un fichier dot pour GraphViz.

Je rajoute ci-dessous un utilitaire implémentant les fonctions find et grep nécessaire à l’utilitaire calltree susvisé.

pygrep.py

P.-S.

Plus tard je suis tombé sur pycparser basé sur PLY un parser Lex et Yacc mais je n’ai pas encore étudié son fonctionnement...