2011-02-25 19:04:32 +01:00
|
|
|
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
2011-02-25 19:34:17 +01:00
|
|
|
# This script can be used on a valgrind output of the tests (from
|
|
|
|
# tests_in_valgrind.sh) to remove some uninteresting error reports.
|
|
|
|
# Since we care about the tested application not leaking/crashing, not
|
|
|
|
# the tests itself, memory leaks that are caused only by the tests
|
|
|
|
# (eg. unreleased test data), we don't want to have logs full of them.
|
|
|
|
#
|
|
|
|
# This script does some heuristics to eliminate some of such error
|
|
|
|
# reports. Currently, the memory lost reports whose stack contains
|
|
|
|
# no call from the real application are suppressed.
|
|
|
|
#
|
|
|
|
# Of course, the rest still can contain many uninteresting entries.
|
|
|
|
|
2011-03-02 13:26:59 +01:00
|
|
|
# Yes, it's perl even when we use python. I wrote it for myself when
|
|
|
|
# I needed to clean the outputs and after it proved useful to me, I
|
|
|
|
# thought it might be for others too, so I just included it. It's not
|
|
|
|
# that we would be switching to perl. If it should grow in future to
|
|
|
|
# include more heuristics and do something more fancy, we should probably
|
|
|
|
# rewrite it in python instead.
|
|
|
|
|
2011-02-25 19:04:32 +01:00
|
|
|
my ($block, $blockOK);
|
|
|
|
|
|
|
|
sub endBlock(_) {
|
|
|
|
return unless $block;
|
|
|
|
if ($blockOK) {
|
|
|
|
print @$block;
|
|
|
|
}
|
|
|
|
undef $block;
|
|
|
|
undef $blockOK;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub startBlock(_) {
|
|
|
|
$block = [@_];
|
|
|
|
}
|
|
|
|
|
|
|
|
sub addToBlock(_) {
|
|
|
|
my ($line) = @_;
|
|
|
|
push @$block, $line;
|
|
|
|
return unless $line =~ /^==\d+==\s+(at|by) 0x[0-9A-F]+: (.*) \(.+:\d+\)$/;
|
|
|
|
$_ = $2;
|
|
|
|
return $blockOK = 1 if /^isc::/;
|
|
|
|
return $blockOK = 1 if /^asiolink:/;
|
|
|
|
return if /^main \(/;
|
|
|
|
return if /^testing::/;
|
|
|
|
return if /^\(anonymous namespace\)::/;
|
|
|
|
$blockOK = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
while(<>) {
|
|
|
|
if (/^==\d+==\s*$/) {
|
|
|
|
print;
|
|
|
|
endBlock;
|
|
|
|
} elsif (/^==\d+==\s+\d+bytes.*lost in loss record/) {
|
|
|
|
startBlock;
|
|
|
|
} elsif ($block) {
|
|
|
|
addToBlock;
|
|
|
|
} else {
|
|
|
|
print;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
endBlock;
|