2010-02-13 06:01:49 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
#
|
|
|
|
|
# vg-run.sh - convenience wrapper script to run an executable with valgrind
|
|
|
|
|
# using "typical options"; output goes to a logfile, which is
|
|
|
|
|
# fed to less afterwards.
|
|
|
|
|
#
|
|
|
|
|
# a valgrind suppression file is generated automatically, in
|
|
|
|
|
# case there is an executable "vgsuppression" located in the same
|
|
|
|
|
# directory as the target executable
|
|
|
|
|
#
|
|
|
|
|
# Ichthyo 8/2007
|
|
|
|
|
#
|
|
|
|
|
LOGFILE=,valgrind.log
|
|
|
|
|
SUPPRESS=vgsuppression
|
2011-01-29 14:10:19 +01:00
|
|
|
MODULEDIR=modules
|
2010-02-13 06:01:49 +01:00
|
|
|
VALGRINDFLAGS=${VALGRINDFLAGS:---leak-check=yes --show-reachable=yes --demangle=yes}
|
|
|
|
|
|
|
|
|
|
EXECUTABLE=$1
|
|
|
|
|
if [[ ! -x $EXECUTABLE ]]; then
|
|
|
|
|
echo -e "ERROR: executable \"$EXECUTABLE\" not found.\n\n"
|
|
|
|
|
exit -1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PATHPREFIX=${EXECUTABLE%/*}
|
|
|
|
|
SUPPRESS="$PATHPREFIX/$SUPPRESS"
|
|
|
|
|
|
2011-01-29 14:10:19 +01:00
|
|
|
# need to set a library search path, because valgrind doesn't handle DT_RUNPATH and $ORIGIN properly
|
|
|
|
|
export LD_LIBRARY_PATH=$PATHPREFIX/$MODULEDIR:$LD_LIBRARY_PATH
|
|
|
|
|
|
2010-02-13 06:01:49 +01:00
|
|
|
if [[ -x $SUPPRESS ]]; then
|
|
|
|
|
if [[ $SUPPRESS -nt $SUPPRESS.supp ]]; then
|
|
|
|
|
echo 'generating valgrind supression file...'
|
|
|
|
|
|
|
|
|
|
valgrind $VALGRINDFLAGS -q --gen-suppressions=all $SUPPRESS 2>&1 \
|
|
|
|
|
| awk '/^{/ {i = 1;} /^}/ {i = 0; print $0;} {if (i == 1) print $0;}' >$SUPPRESS.supp
|
|
|
|
|
echo 'done.'
|
|
|
|
|
fi
|
|
|
|
|
SUPPRESSIONFLAG="--suppressions=$SUPPRESS.supp"
|
|
|
|
|
else
|
|
|
|
|
echo 'no suppression.'
|
|
|
|
|
fi
|
|
|
|
|
|
2011-01-29 14:10:19 +01:00
|
|
|
|
2010-02-13 06:01:49 +01:00
|
|
|
echo "running......$@"
|
|
|
|
|
|
|
|
|
|
valgrind $VALGRINDFLAGS --log-file=$LOGFILE.%p $SUPPRESSIONFLAG $@ &
|
|
|
|
|
PID=$!
|
|
|
|
|
wait $PID
|
|
|
|
|
less $LOGFILE.$PID
|
|
|
|
|
|