Wie leite ich die Ausgabe von Valgrind in eine Datei um?

147

Während ich mit dem Valgrind-Tool arbeite, muss ich die vom Valgrind-Tool erzeugten Details protokollieren. Wie kann ich das erreichen? Ich habe so etwas versucht,

 valgrind a.out | test

und

 valgrind a.out > test

Es gab nur die Ausgabe des Programms und nicht den Valgrind-Speicherfehler, Leckinformationen. Sogar ich werde so, wenn das Programm keine Benutzerinteraktion erfordert (dh Eingabe geben). Wenn das Programm Benutzereingaben benötigt, funktioniert auch das Ding selbst nicht.

Wie kann ich das machen?

Dinesh
quelle
2
Haben Sie versucht, sowohl stout als auch stderr umzuleiten? valgrind a.out &> file
Sidyll

Antworten:

414
valgrind --log-file="filename"
Vasileios Lekakis
quelle
1
Dies spart nur stderr. Ist es möglich, sowohl stderr als auch stdout in derselben Reihenfolge in derselben Datei zu speichern, wie sie im Terminal geschrieben ist (dh um die Kohärenz zwischen den Ausgaben des getesteten Programms und dem von valgrind gemeldeten Fehler zu gewährleisten)?
Prokop Hapala
78

Standardmäßig schreibt Valgrind seine Ausgabe in stderr. Sie müssen also Folgendes tun:

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

Alternativ können Sie Valgrind anweisen, woanders zu schreiben. Siehe http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (aber ich habe es nie versucht).

Oliver Charlesworth
quelle
4
Vielen Dank :). Es funktionierte. Können Sie mir bitte sagen, was mit diesen "2> & 1" ist?
Dinesh
10
@Dinesh: Ich schlage vor, gnu.org/software/bash/manual/bashref.html#Redirections zu lesen , in dem die bizarre Bash-Syntax für Weiterleitungen beschrieben wird!
Oliver Charlesworth
16
HINWEIS: Dieser Vorschlag sendet auch a.outdie Ausgabe an dieselbe Protokolldatei. Wenn Sie die Ausgabe von valgrind ohne a.out 's in der Protokolldatei speichern möchten , sollten Sie die --log-filevon Lex vorgeschlagene Option verwenden.
Edam
Dies ist auch eine gute Antwort zum Debuggen von Speicherlecks!
Kostenlose URL
10

Sie können auch die Optionen --log-fd festlegen, wenn Sie Ihre Protokolle nur mit weniger lesen möchten. Zum Beispiel :

valgrind --log-fd=1 ls | less
Ziad
quelle