Question

Est il y a outil simple, qui peut être utilisé pour déterminer d'où une fonction est appelée, qui d'autre fonction appelle la fonction ...?

Modifier :. J'utilise Mac OS X (10.6) et que vous voulez juste faire l'analyse statique

Merci!

Était-ce utile?

La solution

Que diriez-vous cscope ? Découvrez 3 et 4 articles de balles sur la page:

  • fonctions appelées par une fonction
  • Fonctions appelant une fonction

Il a été un moment que je cscope sur C ++, je me souviens qu'il soit solide comme le roc sur le code C, mais pas aussi forte avec C ++.

Autres conseils

gtags est un outil que vous pouvez utiliser pour faire le marquage, mais pour le traçage appel aussi bien.

http://www.gnu.org/software/global/

prend en charge C, C ++, Yacc, Java et PHP4. Mais il ne peut pas gérer les modèles de C ou d'autres étoffes complexes correctement.

En utilisant cet analyseur de marquage, je l'ai fait un script pour obtenir un arbre d'appel de
la sélection de l'utilisateur grâce à l'achèvement de bash comme ce qui suit,
qui est l'affichage d'un calltree dans le code Google profileur:

% global-calltree -x prof_handler Add Evict ProfileData Stop DisableHandler RAW_CHECK WRITE_TO_STDERR
prof_handler:414 => Add:441               |profiler.cc                         |instance_.collector_.Add(depth, stack);
 Add:241 => Evict:290                      |profiledata.cc                      |Evict(*e);
  Evict:61 => ProfileData:75                |profiledata.cc                      |ProfileData::ProfileData()
   ProfileData:124 => Stop:125               |profiledata.cc                      |Stop();
    Stop:261 => DisableHandler:273            |profiler.cc                         |DisableHandler();
     DisableHandler:400 => RAW_CHECK:405       |profiler.cc                         |RAW_CHECK(sigaction(SIGPROF, &sa, NULL) == 0, "sigaction failed");
      RAW_CHECK:83 => WRITE_TO_STDERR:86        |base/logging.h                      |WRITE_TO_STDERR("Check failed: " #condition ": " message "\n",           \
       WRITE_TO_STDERR:59 => DECLARE_int32:65    |base/logging.h                      |DECLARE_int32(verbose);

Je ne sais pas sur les outils simples, mais gratuitement, il y a codeviz (vous pouvez lire les décharges brutes plutôt que de générer des graphiques si vous préférez que). Caveat: tous les outils d'analyse statique ont des problèmes avec les appels virtuels, et pire encore avec des modèles.

Puisque vous utilisez Mac OS, clang est un nouveau compilateur avec fonction d'analyse statique.

Un exemple sur youtube: Recherche de bogues avec clang

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top