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