59 lines
1.4 KiB
Bash
Executable File
59 lines
1.4 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# Munge the memory audit output
|
|
# Build up a history of memory allocation and frees
|
|
# then sort the output, removing known "leaks" caused by PDUs
|
|
#
|
|
# $Id: audit,v 1.1 1997/12/12 04:24:09 chatz Exp $
|
|
#
|
|
|
|
nawk '
|
|
$1 != "audit:" { next }
|
|
$4 == "malloc" || $4 == "calloc" || $4 == "valloc" || $4 == "strdup" {
|
|
if ($5 in file) {
|
|
printf("Leak (%s): was %s %d bytes, now %s:%s %s %d bytes\n", $5, file[$5], size[$5], $2, $3, $4, $6);
|
|
delete file[$5];
|
|
delete size[$5];
|
|
}
|
|
file[$5] = $2 ":" $3;
|
|
size[$5] = $6;
|
|
}
|
|
$4 == "realloc" {
|
|
if ($5 != $6) {
|
|
if ($5 in file) {
|
|
delete file[$5];
|
|
delete size[$5];
|
|
}
|
|
else if ($5 != "0x0") {
|
|
printf("Realloc problem (%s): %s:%s reallocd unknown address %s for %s bytes\n", $6, $2, $3, $5, $7);
|
|
}
|
|
}
|
|
else if (!($5 in file)) {
|
|
printf("Realloc problem (%s): %s:%s reallocd unknown address %s for %s bytes\n", $6, $2, $3, $5, $7);
|
|
}
|
|
file[$6] = $2 ":" $3;
|
|
size[$6] = $7;
|
|
}
|
|
$4 == "free" {
|
|
if ($5 in file) {
|
|
delete file[$5];
|
|
delete size[$5];
|
|
}
|
|
else {
|
|
printf("Unallocated Free (%s): %s:%s\n", $5, $2, $3);
|
|
}
|
|
}
|
|
END {
|
|
total = 0;
|
|
for (i in file) {
|
|
printf("%s bytes at %s by %s\n", size[i], i, file[i]);
|
|
total += int(size[i]);
|
|
}
|
|
printf("Total memory still in use = %d bytes\n", total);
|
|
}' \
|
|
| sed \
|
|
-e "/irix\.c:189/d" \
|
|
-e "/indom\.c:429/d" \
|
|
| sort -n
|
|
|