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