167 votes

Comment rediriger la sortie de Valgrind vers un fichier ?

Lorsque je travaille avec l'outil Valgrind, j'ai besoin d'enregistrer les détails produits par l'outil Valgrind. Comment puis-je accomplir cela ? J'ai essayé quelque chose comme,

 valgrind a.out | test

et

 valgrind a.out > test

Il ne donnait que la sortie du programme et pas les informations sur les erreurs et les fuites de mémoire de Valgrind. Même si le programme ne nécessite aucune interaction de la part de l'utilisateur (c'est-à-dire s'il n'y a pas d'entrée), j'obtiens ce résultat. Si le programme a besoin d'une entrée utilisateur, même cette chose ne fonctionnera pas.

Comment puis-je le faire ?

3 votes

Avez-vous essayé de rediriger à la fois stout et stderr ? valgrind a.out &> file

455voto

Lex Points 919
valgrind --log-file="filename"

4 votes

Ceci ne sauvegarde que stderr, est-il possible de sauvegarder à la fois stderr et stdout dans le même fichier dans le même ordre que ce qui est écrit dans le terminal (i.e. pour garder une cohérence entre les sorties du programme testé et les erreurs rapportées par valgrind) ?

90voto

Oli Charlesworth Points 148744

Par défaut, Valgrind écrit sa sortie sur stderr. Vous devez donc faire quelque chose comme :

valgrind a.out > log.txt 2>&1

Alternativement, vous pouvez dire à Valgrind d'écrire ailleurs ; voir http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (mais je n'ai jamais essayé).

5 votes

Merci beaucoup :). Cela a fonctionné. Pouvez-vous me dire ce que signifie ce "2>&1" ?

11 votes

@Dinesh : Je vous suggère de lire gnu.org/software/bash/manual/bashref.html#Redirections qui décrit la syntaxe bizarre de Bash pour faire des redirections !

17 votes

NOTE : que cette suggestion enverra également a.out dans le même fichier journal. Si vous voulez sauvegarder la sortie de valgrind dans le fichier journal sans a.out vous devez utiliser l'option --log-file option suggérée par Lex.

12voto

Ziad Points 156

Vous pouvez également définir les options --log-fd si vous voulez juste lire vos journaux avec un less. Par exemple :

valgrind --log-fd=1 ls | less

5voto

KutalmisB Points 852

En plus des autres réponses (notamment par Lekakis ), certains remplacements de chaînes peuvent également être utilisés dans l'option --log-file= tel qu'élaboré dans le Manuel d'utilisation de Valgrind .

Quatre remplaçants étaient disponibles au moment de la rédaction :

  • %p : Imprime l'ID du processus en cours
    • valgrind --log-file="myFile-%p.dat" <application-name>
  • %n : Imprime le numéro de séquence du fichier unique pour le processus en cours
    • valgrind --log-file="myFile-%p-%n.dat" <application-name>
  • %q{ENV} : Imprime le contenu de la variable d'environnement ENV
    • valgrind --log-file="myFile-%q{HOME}.dat" <application-name>
  • %% : Imprimés %
    • valgrind --log-file="myFile-%%.dat" <application-name>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X