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ć?


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

Odpowiedzi:


415
valgrind --log-file="filename"

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).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.