Forum Programmation.c Utilisation de valgrind/callgrind

Posté par  .
Étiquettes : aucune
0
5
oct.
2009
Sali salut

Je travaille sur un logiciel écrit en C et j'essaie de "profiler" son activité avec callgrind. Le logiciel se comporte ainsi : il démarre et ensuite il fork 1 ou plusieurs fils.

Donc pour utiliser valgrind j'utilise cette commande :

valgrind --trace-children=yes --tool=callgrind --dump-instr=yes src/foo -f foo.conf


Seulement le fichier généré par cette commande concerne uniquement le processus père, et ne m'intéresse pas. Donc j'utilise callgrind_control -d avec en argument le PID du processus fils (que j'ai repéré avec ps par exemple) pour générer un dump de l'activité du processus voulu.

Et là le comportement de callgrind_control m'interloque : il créé un dump sur une durée determinée je ne sais comment. le dump ne sera pas généré tant que mon processus n'aura pas atteint un certain niveau d'activité, et donc si mon processus consomme 100% de CPU, le dump va être généré quasiment immédiatement.

J'aimerai que le dump soit généré jusqu'à ce que mon processus fils aie terminé son exécution, et je ne sais pas si c'est possible avec callgrind.

Ou alors callgrind peut il générer un dump également pour les processus fils ?

Merci d'avance.
  • # re

    Posté par  . Évalué à 1.

    N'utilise pas callgrind_control, c'est pas ce que tu veux (a moins que tu veuille monitorer pas "tranche").
    valgrind --tool=callgrind --help
    dit:
    --callgrind-out-file= Output file name [callgrind.out.%p]
    donc il doit sortir un fichier par processus
    --separate-threads=yes doit aider aussi

    Un bete:
    valgrind --tool=callgrind --trace-children=yes --separate-threads=yes strace ls
    me sort deja 4 fichiers!

    Si tu connais pas, kcachegrind lit ces fichiers de facon plus user friendly.
    • [^] # Re: re

      Posté par  . Évalué à 1.

      Il n'y a pas de threads dans le programme que je veux analyser.
      Quand j'utilise valgrind sans callgrind_control, à la fin de l'exécution du programme 1 seul dump est généré et il ne contient que les informations du processus père et pas celles des processus fils.
      • [^] # Re: re

        Posté par  . Évalué à 1.

        Il n'y a pas de threads dans le programme que je veux analyser.

        et ben met pas l'option.

        Quand j'utilise valgrind sans callgrind_control, à la fin de l'exécution du programme 1 seul dump est généré et il ne contient que les informations du processus père et pas celles des processus fils.

        Le test tout con strace ls ne te sort pas plusieurs dump???
        Soit t'as pas fait le test, soit t'as pas la derniere version stable 3.5.0.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.