Générer une arborescence d’appels à partir de la firebase database cscope

Je souhaite générer des arbres d’appel complets et partiels à partir de la firebase database cscope de projets c et c ++ sous Linux.

Le projet est plutôt volumineux. Il peut donc être difficile de travailler avec l’arbre d’appel complet du projet. Je souhaite donc limiter la génération d’arbres d’appel avec un filtre de noms de fonctions similaire à celui de grep.

Et aussi je veux être capable de construire des sous-arbres “appelés par” et “appelés de” à partir de n’importe quel point.

Donc, l’outil doit être interactif et facile à corriger.

PS: Je veux utiliser la firebase database cscope, car elle est déjà utilisée dans le projet et sa génération est assez rapide. J’utilise vim editor et j’ai le système X windows.

Il y a un programme cbrowser sur sourceforge, mais sa fonctionnalité call-tree (callgraph) est cassée.

    si vous voulez le faire en utilisant vim, voici un moyen:

    http://www.vim.org/scripts/script.php?script_id=2368

    J’ai tenté de “résoudre” le problème de l’arbre des appels dans cbrowser (voir http://retprogbug.wordpress.com/2010/09/18/an-attempt-to-resuscitate-cbrowser-0-8/ ) étant une programmation complète, je ne donne aucune garantie.

    kscope peut être une autre option. Je ne sais pas s’il fera tout ce qui est spécifié, mais il est assez polyvalent pour une application à interface graphique.

    Les utilisateurs Ubuntu qui rencontrent des difficultés pour le faire fonctionner sont invités à suivre ces instructions .

    J’ai obtenu ce script Bash basé sur cscope pour fonctionner dans Cygwin et Windows: http://toolchainguru.blogspot.com/2011/03/c-calltrees-in-bash-revisited.html

    Voir l’exemple d’appel “graph” (je l’ai appelé un appel “tree”, whoops). Voir l’exemple du kernel Linux.

    Cela nécessite cscope (bien sûr) et graphviz. Il est capable de faire des graphiques en amont et en aval, ainsi que des graphiques combinés de haut en bas (voir exemple).

    Je ne l’ai pas démontré ici, mais cette méthode fonctionne très bien pour les grands projets où la même fonction peut être définie dans plusieurs annuaires. Il y aura juste un noeud dessiné pour le même nom de fonction (donc un noeud “principal” même si vous avez plusieurs main () définis dans votre structure de répertoire) — et vous aurez plusieurs arêtes émanant d’un tel noeud , avec indicateurs de fichier / ligne. J’ai trouvé cet aspect plus utile que GNU cflow, qui n’insistait que dans un seul répertoire. .)

    Je ne connais aucun programme, à part cscope, permettant de lire les bases de données cscope. Même la fonctionnalité cstag de vim lance simplement un processus cscope en arrière-plan sur lequel elle interroge.

    En ce qui concerne la génération de graphes d’appel, si vous n’êtes pas dérangé par l’extérieur de cscope, j’aime bien ce que crée doxygen. Ils peuvent être un peu gros, mais il génère également le graphique à partir de presque tous les points, et il est incroyablement facile de parcourir la source directement à l’intérieur.