¿Cómo redirigir la salida de Valgrind a un archivo?


147

Mientras trabajo con la herramienta Valgrind, necesito registrar los detalles producidos por la herramienta Valgrind. ¿Cómo puedo lograr eso? Intenté algo como

 valgrind a.out | test

y

 valgrind a.out > test

Dio solo la salida del programa y no el error de memoria valgrind, la información de fuga. Incluso me estoy poniendo así si el programa no requiere interacción del usuario (es decir, dar entrada). Si el programa necesita la entrada del usuario, incluso esa cosa en sí misma no funcionará.

¿Cómo puedo hacer esto?


2
¿Has intentado redirigir tanto stout como stderr? valgrind a.out &> file
sidyll

Respuestas:


415
valgrind --log-file="filename"

1
esto ahorra solo stderr, ¿es posible guardar tanto stderr como stdout en el mismo archivo en el mismo orden que está escrito en la terminal (es decir, para mantener la coherencia entre las salidas del programa probado y el error informado por valgrind)?
Prokop Hapala

78

Por defecto, Valgrind escribe su salida en stderr. Entonces necesitas hacer algo como:

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

Alternativamente, puede decirle a Valgrind que escriba en otro lugar; ver http://valgrind.org/docs/manual/manual-core.html#manual-core.comment (pero nunca lo he intentado).


44
Muchas gracias :). Funcionó. ¿Puedes decirme qué pasa con ese "2> y 1"?
Dinesh

10
@Dinesh: ¡Sugiero leer gnu.org/software/bash/manual/bashref.html#Redirections , que describe la extraña sintaxis de Bash para hacer redirecciones!
Oliver Charlesworth

16
NOTA: que esta sugerencia también enviará a.outla salida al mismo archivo de registro. Si desea guardar la salida de valgrind en el archivo de registro sin a.out 's', debe usar la --log-fileopción sugerida por Lex.
Edam

¡Esta también es una gran respuesta para depurar fugas de memoria!
Url gratis el

10

También puede configurar las opciones --log-fd si solo desea leer sus registros con un menos. Por ejemplo :

valgrind --log-fd=1 ls | less
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.