diff options
Diffstat (limited to 'scripts/test_leaks.pl')
-rwxr-xr-x | scripts/test_leaks.pl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/scripts/test_leaks.pl b/scripts/test_leaks.pl new file mode 100755 index 00000000..1fbc7b9e --- /dev/null +++ b/scripts/test_leaks.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl + +# Copyright (c) 2003 America Online, Inc. All rights reserved. + +# A crude, simple script that looks at "loss record" (stacks) in valgrind +# output, and if the stack contains any of the funcs to ignore, then it +# skips that stack else the stack is printed. + +# syntax +# test_leaks.pl <file containing funcs to ignore> <valgrind output file> + + +$ignore_file = shift @ARGV; +$valgrind_output = shift @ARGV; + +# gather funcs to ignore +open(IN, "$ignore_file") || die "Unable to open file $ignore_file"; +$i=0; +while(<IN>) { + chop; + $ignore[$i++] = $_; +} +close IN; + +# now walk through the valgrind output +open(IN, "$valgrind_output") || die "Unable to open file $valgrind_output"; +while(<IN>) { + if (/==\d+==.*loss record.*\n/) { + $line=$_; + next; + } else { + if (/==\d+== \n/ && $line) { + $i=0; + $bad=0; + while ($ignore[$i]) { + if ($line =~ /$ignore[$i]/) { + #printf "STACK TO BE IGNORED : \n%s\n", $line; + $bad=1; + break; + } + $i++; + } + + # if none of the patterns matched... + if ($bad==0) { + printf "STACK TO EXAMINE: \n%s\n", $line; + } + + undef $line; + next; + } + + if ($line) { + $line=$line.$_; + } + + } +} +close IN; + |