2012-08-14 1 views
7

Je suis principalement un programmeur C et C++ et j'ai souvent besoin de comprendre rapidement la structure des bases de code très volumineuses (gcc, noyau Linux). Je me demande s'il y a des outils pour aider à cet égard. Je suis particulièrement intéressé par les graphes d'appel, les références de structure de données à travers le projet, les graphes de dépendance, la localisation rapide des symboles, etc. Je connais ctags et cscope mais je cherche quelque chose avec plus de visualisation comme un graphe d'appel. d'une fonction, enraciner le graphique lors d'un appel particulier, l'inverser (c.-à-d. localiser tous les appels à une fonction donnée), etc.Outils de navigation, de compréhension et de lecture de code source

+0

RTCM - lisez le manuel du compilateur. La plupart des compilateurs font ce que vous voulez et je pense que les compilateurs que vous utilisez ne font pas exception. –

Répondre

0

Veuillez essayer et utiliser SourceInsight. Il est très utile avec le code de navigation et de le comprendre. Il fournit la plupart des fonctionnalités demandées par vous.

5

Si vous voulez construire des graphiques d'appel, vous pouvez rouler les vôtres avec les codes -finstrument-functions de GCC.

En fait, lorsque vous compilez un programme avec cette option activée, GCC appelle les fonctions suivantes chaque fois que le programme cible entre ou sort d'une fonction:

 void __cyg_profile_func_enter (void *this_fn, 
            void *call_site); 
     void __cyg_profile_func_exit (void *this_fn, 
            void *call_site); 

Ce que vous devez faire est de définir ces fonctions et écrire dans votre logique pour produire le graphique d'appel là. Explique comment vous pouvez produire un graphique d'appel en utilisant -finstrument-functions et GraphViz. Tous les outils impliqués sont des logiciels libres et gratuits.

Bien sûr:

  1. Les graphiques GraphViz produit sont autonomes, et ne fait pas partie d'un IDE.
  2. Je ne suis pas vraiment sûr si la production d'un graphique d'appel de Linux (le noyau) est possible de cette façon.
0

Vous pouvez essayer cflow. Il vous donne un graf des appels de fonctions à l'intérieur. Ce n'est pas très flexible cependant.

Questions connexes