Reputation: 9117
I run a command like this:
$ valgrind ./my_program < 1.in
And I get Valgrind's messages about leaks and errors as well as the output stdout and stderr streams of the my_program.
I would like to redirect/mute all the streams of my_program (both stdout and stderr).
Running > /dev/null
doesn't mute the stderr stream of my_program.
Running > /dev/null 2> /dev/null
mutes all the output stream of my_program all together with Valgrind's messages.
According to this thread: How to redirect Valgrind's output to a file? Valgrind is capable of streaming its output directly to a log file using valgrind --log-file="filename"
.
I've came up with a solution like this
$ valgrind --log-file="filename" ./my_program < 1.in && cat filename
Is there an easier way to do this?
Upvotes: 5
Views: 9024
Reputation: 2077
As I understood the question, this is the answer that I found works for me:
valgrind --log-fd=9 [program] 9>&1 1>/dev/null 2>/dev/null
This outputs the valgrind messages to stdout, but the stdout and stderr from the program goes to /dev/null. The order of the redirects is important, as described here.
A "-q" option will also restrict valgrind to errors only.
Upvotes: 0
Reputation: 317
This may be a little late to the punch, but I'm running valgrind 3.10.1 on ubuntu, and you can simply use the --log-file=<filename>
flag.
I.E. run:
valgrind [args] --log-file=<filename> ./my_program
Upvotes: 6
Reputation: 8484
To separate valgrind and application output you can redirect valgrind output to another file descriptor:
valgrind --log-fd=9 9>>test.log ./app
Upvotes: 11