2009-09-22 8 views

Répondre

3

Je ne sais pas si VS peut le faire, mais vous pouvez utiliser doxygen pour générer un graphe d'appel pour chaque fonction.

+1

+1 Doxygen est un excellent outil. – luke

2

Vous pouvez CppDepends pour générer la carte de dépendance de votre projet ainsi que d'autres informations utiles

0

ou vous pouvez utiliser un autre éditeur. Par exemple, SourceInsight fait un excellent travail en produisant des appels/appelés par des graphiques en temps réel dans l'éditeur.

Pour une sortie programmatique: J'ai trouvé oing C code unit testing on a shoestring très intéressant. Pour Visual Studio, il a besoin d'un travail manuel, car Visual Studio a une compatibilité C99 médiocre.

outils externes (comme doxygen et CppDepends) sont très utiles, aussi longtemps que vous pouvez vivre avec 2 constrainst:

  • non seulement les dépendances d'appels, mais dépendances aussi à savoir les variables globales sont suivis
  • dépendances sont statiques

Pour les dépendances statiques, considérons l'exemple suivant:

void foo(boolean b) 
{ 
    if (false == b) 
    { bar1(); } 
    else 
    { bar2(); } 
} 

Les outils statiques sortiront à la fois bar1 et bar2. Un graphique d'appel d'exécution afficherait soit bar1 ou bar2 en fonction de la valeur du paramètre.

1

Compilez-le dans un fichier objet et récupérez la liste des symboles externes non définis. Vous pouvez obtenir la liste automatiquement avec les outils appropriés pour votre plate-forme: sous Linux, c'est readelf.

+0

Approche intéressante, mais pas très automatisée. – Bill

+0

@Bill, comment se fait-il que ce n'est pas automatisé? Encore une fois, en parlant de linux, vous exécutez le compilateur (à partir de votre script de création d'application), puis exécutez un programme 'readelf' qui donne le fichier objet en entrée; il imprime l'information dans le sujet avec juste un peu de post-traitement. C'est assez automatisé. Vous pouvez également trouver le moyen automatisé sur votre plate-forme. Juste certaines plates-formes ne sont pas créées pour l'automatisation, donc c'est plus difficile en eux ;-) –

+0

Cela semble plus automatisé, oui. "étudier les symboles externes non définis" semblait très manuel. – Bill

1

Pour une fonction individuelle, cliquez avec le bouton droit de la souris et sélectionnez Navigateur d'appel-> Afficher le graphique d'appels.

Si vous faites cela à partir de main(), vous obtenez un arbre d'appel pour le thread principal(). Vous devez le faire sur le point d'entrée de chaque thread pour obtenir une vue complète d'une application multithread. Il peut ne pas gérer les fonctions invoquées par des pointeurs bien sûr.

Questions connexes