Subject: bug#17512: Valgrind and regression tests?

From: Jim Meyering <[email-masked]>
Date: Tue, 20 May 2014 22:10:03 -0700

On Fri, May 16, 2014 at 5:35 PM, Paul Eggert <[email-masked]> wrote:
> behoffski wrote:
>>
>>    1. Use a shell alias:
>>
>>         grep="valgrind --log-file=foo grep" make check
>
>
> That won't work, as too many parts of the system ignore the aliases.
>
>
>>    2. Replace grep/egrep/fgrep as appropriate to execute the program
>>       within a shell, where valgrind plus any options is incorporated
>>       into the program invocation and the logfile is treated
>>       appropriately in the program invocation aftermath.
>
>
> Yes, something like that should work.  You can set up your own
> implementation of grep, like this:
>
> #! /bin/sh
> exec valgrind --log-file=foo /full/path/to/actual/grep "$@"
>
> in a shell script called 'grep', in a different directory, and prepand that
> directory to your PATH.
>
> Perhaps Jim has a better way to do it, though -- he's more of a valgrind
> wizard than I.

I use a script to replace each binary with this generated script:

#!/bin/sh
saved_binaries_dir="${0%/*}/.vg-tmp"
export PATH=$saved_binaries_dir:$PATH
prog=${0##*/}
# Disable this: http://udrepper.livejournal.com/11429.html
MALLOC_PERTURB_=0
export MALLOC_PERTURB_
exec /usr/bin/valgrind -v --suppressions=/dev/null \
  --log-file=/tmp/vg-log-2014-05-20.22:05:28-%q{GREP_TEST_NAME} \
  --leak-check=full --track-fds=yes --num-callers=15 -- "$prog" "$@"

which refers to the original binary via a subdirectory named .vg-tmp
relative to the original location of the binary. That script also moves
each binary into the .vg-tmp subdir.

Then, running "make check" creates many /tmp/vg-log-* files,
each related to the name of a test.