#! /bin/sh # $Id: malloctrace,v 1.1 90/10/13 03:24:44 lee Exp $ # process the output of -DMALLOCTRACE nawk ' BEGIN { totalStillAllocated = 0 } /^malloc/ { if ($4 in Sizes) { Oops("Malloc Address " $4 " in use (" File[$4] ", " Line[$4] "): " $0) } Sizes[$4] = $2 if (!($5 in FilesSeen)) { ++NFiles FilesSeen[$5] = NFiles; FileNames[NFiles] = $5 } File[$4] = FilesSeen[$5] Line[$4] = $6 } /^free/ { if (!($2 in Sizes)) { Oops("free " $2 " not previously in use") } delete Sizes[$2] delete File[$2] delete Line[$2] } /^realloc/ { if (!($2 in Sizes)) { Oops("Realloc address not in use: " $0) } delete Sizes[$2] delete File[$2] delete Line[$2] Sizes[$5] = $3 if (!($6 in FilesSeen)) { ++NFiles FilesSeen[$6] = NFiles; FileNames[NFiles] = $6 } File[$5] = FilesSeen[$6] Line[$5] = $7 } END { for (i in Sizes) { printf "%s %d\t%s %d bytes\n", FileNames[File[i]], Line[i], i, Sizes[i] totalStillAllocated += Sizes[i] } printf "total still allocated: %d\n", totalStillAllocated } function Oops(s) { print s | "cat 1>&2" exit 1 } # $Log: malloctrace,v $ # Revision 1.1 90/10/13 03:24:44 lee # Initial revision # #