mirror of https://github.com/n-hys/bash.git
48 lines
968 B
Awk
Executable File
48 lines
968 B
Awk
Executable File
#! /usr/bin/awk -f
|
|
#
|
|
# xleaktrace - print unfreed memory using input generated by compact malloc
|
|
# tracing (malloc_set_trace(1))
|
|
#
|
|
# NOTE: we ignore `realloc' tags because they're just extra information
|
|
#
|
|
# Copyright (c) 2001 Chester Ramey
|
|
# Permission is hereby granted to deal in this Software without restriction.
|
|
# THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
|
|
#
|
|
# Chet Ramey
|
|
# chet@po.cwru.edu
|
|
#
|
|
BEGIN {
|
|
FS=":";
|
|
}
|
|
|
|
$1 == "alloc" {
|
|
alloc[$2] = 1;
|
|
|
|
size[$2] = $3;
|
|
file[$2] = $4;
|
|
line[$2] = $5;
|
|
|
|
# printf "allocated: %s %d %d %s %d\n", $2, alloc[$2], size[$2], file[$2], line[$2];
|
|
}
|
|
|
|
$1 == "free" {
|
|
if ($2 in alloc) {
|
|
alloc[$2] = 0;
|
|
# printf "freed: %s %d\n", $2, alloc[$2];
|
|
} else
|
|
printf "freeing unallocated pointer: %s\n", $2;
|
|
|
|
}
|
|
|
|
END {
|
|
printf "unfreed memory\n";
|
|
for (ptr in alloc) {
|
|
if (alloc[ptr] == 1) {
|
|
printf "%s (%d) from %s:%d\n", ptr, size[ptr], file[ptr], line[ptr];
|
|
}
|
|
}
|
|
}
|
|
|
|
|