Jak przekierować dane wyjściowe Valgrind do pliku?

147

Podczas pracy z narzędziem Valgrind muszę rejestrować szczegóły wygenerowane przez narzędzie Valgrind. Jak mogę to osiągnąć? Próbowałem czegoś takiego

 valgrind a.out | test

i

 valgrind a.out > test

Podał tylko wynik programu, a nie błąd pamięci valgrind, informacje o wycieku. Nawet ja się tak dostaję, jeśli program nie wymaga interakcji z użytkownikiem (tj. Podawania danych wejściowych). Jeśli program wymaga wprowadzenia danych przez użytkownika, nawet to samo nie zadziała.

W jaki sposób mogę to zrobić?

Dinesh
źródło
2
Czy próbowałeś przekierować zarówno stout, jak i stderr? valgrind a.out &> file
sidyll

Odpowiedzi:

415
valgrind --log-file="filename"
Vasileios Lekakis
źródło
1
to zapisuje tylko stderr, czy można zapisać zarówno stderr, jak i stdout w tym samym pliku w tej samej kolejności, w jakiej jest zapisywane w terminalu (tj. aby zachować spójność między wyjściami testowanego programu i błędem zgłaszanym przez valgrind)?
Prokop Hapala
78

Domyślnie Valgrind zapisuje swoje dane wyjściowe na stderr. Musisz więc zrobić coś takiego:

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

Alternatywnie możesz powiedzieć Valgrindowi, aby napisał gdzie indziej; zobacz http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (ale nigdy tego nie próbowałem).

Oliver Charlesworth
źródło
4
Wielkie dzięki :). Zadziałało. Czy możesz mi powiedzieć, o co chodzi z tym „2> i 1”?
Dinesh
10
@Dinesh: Proponuję przeczytać gnu.org/software/bash/manual/bashref.html#Redirections , który opisuje dziwaczną składnię Bash do wykonywania przekierowań!
Oliver Charlesworth
16
UWAGA: ta sugestia wyśle ​​również a.outdane wyjściowe do tego samego pliku dziennika. Jeśli chcesz zapisać wyjście Valgrinda do pliku dziennika bez pliku dziennika a.out, powinieneś użyć --log-fileopcji sugerowanej przez Lexa.
edam
Jest to również świetna odpowiedź na debugowanie wycieków pamięci!
Darmowy adres URL
10

Możesz także ustawić opcje --log-fd, jeśli chcesz po prostu czytać logi przy użyciu mniejszego. Na przykład :

valgrind --log-fd=1 ls | less
Ziad
źródło