2010-02-01 7 views
10

Je souhaite générer des arbres d'appel complets et partiels à partir de la base de données cscope de projets c et C++ sous Linux. Le projet est plutôt volumineux, donc il peut être difficile de travailler avec l'arbre d'appel complet du projet, donc je veux limiter la génération d'arbre d'appel avec un filtre de type grep des noms de fonctions.Générer un arbre d'appel à partir de la base de données cscope

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

L'outil doit donc être interactif et facile à réparer.

PS: Je veux utiliser la base de données cscope, car elle est déjà utilisée dans le projet et sa génération est plutôt rapide. J'utilise l'éditeur vim et j'ai X système Windows.

Il existe un programme cbrowser sur sourceforge, mais sa fonctionnalité d'arbre d'appel (callgraph) est rompue.

+0

Cscope gère-t-il les appels de méthode indirects ou virtuels? Si ce n'est pas le cas, quelle est la signification de votre "arbre d'appel complet"?Si vous êtes prêt à vous contenter d'un «arbre d'appel partiel», quel en est le degré de difficulté (l'arbre d'appel vide est un arbre d'appel partiel valide, mais n'est pas très intéressant). –

+0

J'utilise cscope pour le projet C. Je n'ai pas besoin d'être très précis, seulement à un degré tel que cscope avec les requêtes "calls to" et "called from". Je veux obtenir l'appel-graphique complet des fonctions dans le grand projet c. Il doit inclure des appels de fonction explicites. Tout le reste est facultatif. – osgx

Répondre

1

Je ne connais pas de programmes, autres que cscope, qui lisent les bases de données cscope. Même la fonctionnalité cstag de vim démarre un processus cscope en arrière-plan qu'elle interroge. En ce qui concerne la génération de graphes d'appel, si cela ne vous dérange pas de sortir de cscope, j'aime plutôt ce que crée doxygen. Ils peuvent être un peu gros, mais ils génèrent aussi le graphique à partir de presque tous les points, et il est incroyablement facile de naviguer directement dans la source.

+0

cbrowser de sourceforge lit cscope db. – osgx

1

kscope peut être une autre option. Je ne suis pas sûr si cela fera tout ce qui est spécifié, mais il est assez polyvalent pour une application graphique.

Les utilisateurs Ubuntu ayant du mal à le faire fonctionner sont invités à suivre these instructions.

+0

screenshoots de l'arbre d'appel semble être http://sourceforge.net/dbimage.php?id=200328 – osgx

+0

@osgx: Merci. Bien que je ne sois pas sûr si l'OP cherche un arbre dans ce sens, ou pour un [call * graph *] (http://kscope.sourceforge.net/callgraph.png). – intuited

+0

je suis à la recherche des deux. l'arbre est bon, le callgraph est meilleur, et le meilleur est le callgraph pour une partie des foncions. (filtré ou sous-graphique). Et je suis un OP :) – osgx

1

J'ai eu ce script Bash basé cscope à travailler dans Cygwin & de Windows: http://toolchainguru.blogspot.com/2011/03/c-calltrees-in-bash-revisited.html

Voir par exemple appel "graph" (j'ai appelé un appel "arbre", oups). See example from the Linux kernel.

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

Je ne l'ai pas démontré ici mais cette méthode fonctionne très bien sur les grands projets où la même fonction peut être définie dans plusieurs répertoires. Il y aura juste un nœud dessiné pour le même nom de fonction (donc un nœud "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 nœud , avec des indicateurs de fichier/ligne. J'ai trouvé cet aspect plus utile que GNU cflow, qui a insisté pour choisir un seul répertoire à regarder. (Le script Jason Nyberg Bash ne fonctionne pas bien avec le threading, ce que GNU cflow gère bien, quelque chose à garder à l'esprit .)

Questions connexes