2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-22 01:49:48 +00:00
kea/tools/valgrind_test_cleaner.pl
Michal 'vorner' Vaner ae0b20c57c [trac614] Comments
2011-03-02 13:32:29 +01:00

65 lines
1.7 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
# 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.
# 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.
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;