47 lines
		
	
	
	
		
			968 B
		
	
	
	
		
			Awk
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			47 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];
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 	
 | |
| 	
 | 
