Как перенаправить вывод Valgrind в файл?

147

Во время работы с инструментом Valgrind мне нужно регистрировать детали, полученные с помощью инструмента valgrind. Как я могу это сделать? Я пробовал что-то вроде

 valgrind a.out | test

и

 valgrind a.out > test

Это дало только вывод программы, а не ошибку памяти valgrind, информацию об утечке. Даже я получаю, как это, если программа не требует взаимодействия с пользователем (т.е. дает ввод). Если программе требуется ввод данных пользователем, даже эта вещь не будет работать.

Как я могу это сделать?

Динеш
источник
2
Вы пытались перенаправить как stout, так и stderr? valgrind a.out &> file
Сидил

Ответы:

415
valgrind --log-file="filename"
Василейос Лекакис
источник
1
это сохраняет только stderr, возможно ли сохранить как stderr, так и stdout в один и тот же файл в том же порядке, в котором они записаны в терминале (т. е. чтобы сохранить согласованность между выводами тестируемой программы и ошибками, о которых сообщает valgrind)?
Прокоп Хапала
78

По умолчанию Valgrind записывает свой вывод в stderr. Так что вам нужно сделать что-то вроде:

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

Кроме того, вы можете сказать Valgrind, чтобы написать в другом месте; см. 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 s, вам следует использовать --log-fileопцию, предложенную Lex.
Эдам
Это также отличный ответ для устранения утечек памяти!
Бесплатный URL
10

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

valgrind --log-fd=1 ls | less
Зияд
источник