Як перенаправити вихід Valgrind у файл?


147

Під час роботи з інструментом Valgrind мені потрібно записати дані, створені інструментом valgrind. Як я можу це досягти? Я спробував щось подібне,

 valgrind a.out | test

і

 valgrind a.out > test

Це дало тільки вихід програми, а не помилка пам'яті, протікання інформації. Навіть мені стає так, якщо програма не потребує взаємодії з користувачем (тобто даючи введення). Якщо програмі потрібен ввід користувача, навіть сама ця річ не працюватиме.

Як я можу це зробити?


2
Ви спробували перенаправляти як на stout, так і на stderr? valgrind a.out &> file
sidyll

Відповіді:


415
valgrind --log-file="filename"

1
це економить тільки stderr, чи можна зберегти і stderr, і stdout в один і той же файл у тому ж порядку, що і в терміналі (тобто зберегти узгодженість між результатами перевіреної програми та помилками, повідомленими valgrind)?
Прокоп Хапала

78

За замовчуванням Valgrind записує свій результат у stderr. Тому вам потрібно зробити щось на кшталт:

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

Як варіант, ви можете сказати Вальгрінду, щоб він писав десь ще; див. http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (але я цього ніколи не пробував).


4
Дуже дякую :). Це спрацювало. Скажіть, будь ласка, що з цим "2> & 1"?
Дінеш

10
@Dinesh: Я пропоную прочитати gnu.org/software/bash/manual/bashref.html#Redirections , який описує химерний синтаксис Bash для перенаправлення!
Олівер Чарльворт

16
ПРИМІТКА: що ця пропозиція також надішле a.outвисновок у той самий файл журналу. Якщо ви хочете зберегти висновок valgrind у логфайлі без a.out , слід скористатися --log-fileпараметром, запропонованим Lex.
edam

Це також чудова відповідь для налагодження витоків пам'яті!
Безкоштовна URL-

10

Ви також можете встановити параметри --log-fd, якщо ви просто хочете менше читати ваші журнали. Наприклад :

valgrind --log-fd=1 ls | less
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.