2009-04-28 8 views
4

Je travaille sur un projet où je dois trouver quelles fonctions sont appelées dans différents programmes Linux (écrits en C) avec des entrées particulières. Mon approche actuelle a été de compiler un programme avec -pg (option de profilage), de l'exécuter, et de trouver quelles fonctions sont appelées en traitant la sortie de gprof. Seules les fonctions appelées au moins une fois apparaissent dans le fichier de sortie.Trouver quelles fonctions sont appelées dans un programme multi-process sans modifier la source?

Le problème apparent est qu'un seul processus peut écrire dans le fichier de sortie gprof. Si le programme forge plusieurs processus, je n'obtiens aucune sortie de profilage des autres processus.

Y at-il un moyen de faire de gprof un fichier de sortie pour chaque processus (peut-être étiqueté par pid)? Le manuel suggère que chaque processus change dans un répertoire différent, mais je ne veux pas modifier le code source pour le faire. Y at-il un autre outil pour Linux qui peut aider?

Répondre

3

Here ils suggèrent d'utiliser tprof:

Avez-vous essayé valgrind?

http://www.network-theory.co.uk/docs/valgrind/valgrind_17.html

--child-silent-after-fork=<yes|no> [default: no] 

Lorsqu'elle est activée, Valgrind ne comportera pas de débogage ou à la sortie de journalisation pour le processus de l'enfant résultant d'un appel de la fourche. Cela peut rendre la sortie moins confuse (bien que plus trompeuse) lorsqu'il s'agit de processus qui créent des enfants. Il est particulièrement utile en conjonction avec --trace-children =. L'utilisation de ce drapeau est également fortement recommandée si vous demandez une sortie XML (--xml = yes), sinon le XML de l'enfant et du parent peut être mélangé, ce qui le rend généralement inutile.

Questions connexes