Como redirecionar a saída do Valgrind para um arquivo?

147

Ao trabalhar com a ferramenta Valgrind, preciso registrar os detalhes produzidos pela ferramenta valgrind. Como posso conseguir isso? Eu tentei algo como,

 valgrind a.out | test

e

 valgrind a.out > test

Ele forneceu apenas a saída do programa e não o erro de memória do valgrind, informações de vazamento. Mesmo eu estou ficando assim se o programa não requer interação do usuário (ou seja, dando entrada). Se o programa precisar de entrada do usuário, mesmo isso não funcionará.

Como posso fazer isso?

Dinesh
fonte
2
Você já tentou redirecionar stout e stderr? valgrind a.out &> file
sidyll

Respostas:

415
valgrind --log-file="filename"
Vasileios Lekakis
fonte
1
isso salva apenas stderr, é possível salvar stderr e stdout no mesmo arquivo na mesma ordem em que está escrito no terminal (isto é, para manter a coerência entre as saídas do programa testado e o erro relatado pelo valgrind)?
Prokop Hapala 20/01/19
78

Por padrão, o Valgrind grava sua saída no stderr. Então você precisa fazer algo como:

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

Como alternativa, você pode dizer ao Valgrind para escrever em outro lugar; consulte http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (mas nunca tentei isso).

Oliver Charlesworth
fonte
4
Muito obrigado :). Funcionou. Você pode me dizer o que há com esse "2> & 1"?
Dinesh
10
@ Dinesh: sugiro a leitura de gnu.org/software/bash/manual/bashref.html#Redirections , que descreve a bizarra sintaxe do Bash para redirecionamentos!
Oliver Charlesworth
16
NOTA: essa sugestão também enviará a.outa saída para o mesmo arquivo de log. Se você deseja salvar a saída do valgrind no arquivo de log sem a.out 's, deve usar a --log-fileopção sugerida por Lex.
ed13
Essa também é uma ótima resposta para depurar vazamentos de memória!
Url grátis
10

Você também pode definir as opções --log-fd se quiser apenas ler seus logs com menos. Por exemplo :

valgrind --log-fd=1 ls | less
Ziad
fonte