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

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

 valgrind a.out | test

а также

 valgrind a.out > test

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

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


person Dinesh    schedule 02.12.2011    source источник
comment
Вы пробовали перенаправить как stout, так и stderr? valgrind a.out &> file   -  person sidyll    schedule 02.12.2011


Ответы (4)


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

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

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

person Oliver Charlesworth    schedule 02.12.2011
comment
Большое спасибо :). Это сработало. Подскажите, пожалуйста, что это за 2 ›и 1? - person Dinesh; 02.12.2011
comment
@Dinesh: предлагаю прочитать gnu.org/software/bash/manual/ bashref.html # Redirections, в котором описан причудливый синтаксис Bash для выполнения перенаправлений! - person Oliver Charlesworth; 02.12.2011
comment
ПРИМЕЧАНИЕ: это предложение также отправит вывод a.out в тот же файл журнала. Если вы хотите сохранить вывод valgrind в файл журнала без a.out, вам следует использовать параметр --log-file, предложенный Лексом. - person edam; 01.10.2013
comment
Это также отличный ответ для устранения утечек памяти! - person Free Url; 25.11.2017
comment
Если вы хотите передать вывод другой команде: valgrind ./struct -v --leak-check=full 2>&1 | nc -N paste.ubuntu.ir 1337 - person EsmaeelE; 10.02.2021
comment
Это должен быть принятый ответ - person Jacko; 24.02.2021

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

valgrind --log-fd=1 ls | less
person Ziad    schedule 10.03.2015

В дополнение к другим ответам (в частности, Lekakis), некоторые замены строк также могут использоваться в опции --log-file=, как описано в руководство пользователя Valgrind.

На момент написания было доступно четыре замены:

  • %p: Prints the current process ID
    • valgrind --log-file="myFile-%p.dat" <application-name>
  • %n: Prints file sequence number unique for the current process
    • valgrind --log-file="myFile-%p-%n.dat" <application-name>
  • %q{ENV}: Prints contents of the environment variable ENV
    • valgrind --log-file="myFile-%q{HOME}.dat" <application-name>
  • %%: Prints %
    • valgrind --log-file="myFile-%%.dat" <application-name>
person Herpes Free Engineer    schedule 12.12.2020

person    schedule
comment
это сохраняет только stderr, можно ли сохранить как stderr, так и stdout в том же файле в том же порядке, что и в терминале (т.е. для сохранения согласованности между выходными данными тестируемой программы и ошибкой, сообщаемой valgrind)? - person Prokop Hapala; 20.01.2019