Comment rediriger la sortie de Valgrind vers un fichier?

147

Tout en travaillant avec l'outil Valgrind, je dois enregistrer les détails produits par l'outil valgrind. Comment puis-je y parvenir? J'ai essayé quelque chose comme,

 valgrind a.out | test

et

 valgrind a.out > test

Il n'a donné que la sortie du programme et non l'erreur de mémoire valgrind, les informations de fuite. Même j'obtiens comme ça si le programme ne nécessite aucune interaction de l'utilisateur (c'est-à-dire en donnant une entrée). Si le programme a besoin d'une entrée utilisateur, même cette chose elle-même ne fonctionnera pas.

Comment puis-je faire ceci?

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

Réponses:

415
valgrind --log-file="filename"
Vasileios Lekakis
la source
1
cela économise juste stderr, est-il possible de sauvegarder à la fois stderr et stdout dans le même fichier dans le même ordre que celui écrit dans le terminal (c'est-à-dire pour garder la cohérence entre les sorties du programme testé et l'erreur signalée par valgrind)?
Prokop Hapala
78

Par défaut, Valgrind écrit sa sortie dans 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é cela).

Oliver Charlesworth
la source
4
Merci beaucoup :). Ça a marché. Pouvez-vous me dire ce que signifie "2> & 1"?
Dinesh
10
@Dinesh: Je suggère de lire gnu.org/software/bash/manual/bashref.html#Redirections , qui décrit la syntaxe bizarre de Bash pour faire des redirections!
Oliver Charlesworth
16
REMARQUE: cette suggestion enverra également a.outla sortie de la sortie vers le même fichier journal. Si vous souhaitez enregistrer la sortie de valgrind dans le fichier journal sans a.out les s, vous devez utiliser l' --log-fileoption suggérée par Lex.
edam
C'est également une excellente réponse pour déboguer les fuites de mémoire!
Url gratuite
10

Vous pouvez également définir les options --log-fd si vous souhaitez simplement lire vos journaux avec moins. Par exemple :

valgrind --log-fd=1 ls | less
Ziad
la source