123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #!/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.
- 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;
|