2010-05-31 8 views
1

J'ai un processus A qui traite les processus B. A et B - sont des applications différentes. Les deux compilés avec -g flag.Les noms de fonctions callgrind ne sont pas affichés dans les processus enfants

pour le faire tourner avec callgrind j'utiliser commande: valgrind --tool = callgrind --trace-enfants = oui ./A [params]

callgrind.out.xxx de processus parent (A) contient la fonction des noms. pour le processus de l'enfant (B) - il ne contient pas. Quel pourrait être le problème ici?

Merci

Répondre

0

Avez-vous essayé avec la dernière version de valgrind?

Le seul problème actuel qui me semble évident est:

... vous devez vous assurer que la chaîne de format de fichier de sortie (contrôlé par --callgrind-out fichier) ne contient % p (ce qui est vrai par défaut). Dans le cas contraire, les sorties du parent et de l'enfant se remplaceront mutuellement ou seront entremêlées, ce qui n'est certainement pas ce que vous voulez.

extrait de callgrind documentation.

+0

Cette documentation indique également que l'appel spécial est nécessaire dans l'enfant "* Si votre programme forks, l'enfant héritera de toutes les données de profilage qui ont été recueillies pour le parent Pour commencer avec des valeurs de compteur de profil vides dans l'enfant demande CALLGRIND_ZERO_STATS; peut être inséré dans le code à exécuter par l'enfant, directement après la fourchette. De plus, le processus B est une application différente, démarrée par 'fork' +' exec', et il n'y a pas de documentation sur 'exec' – osgx

+0

Il vaut la peine de noter que si vous voulez que valgrind trace les processus fils lancés avec' '' fork + exec' '', vous avez également besoin du drapeau '' '--trace-children = yes'''. Voir la page valgrind '' 'man''' pour la documentation sur' '' 'exec'''. – SullX

Questions connexes