44 lines
		
	
	
		
			766 B
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			766 B
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/perl -w
 | |
| 
 | |
| use vars qw(%free_ptrs_map);
 | |
| use 5.010;
 | |
| 
 | |
| open my $fh, "<", "observer.log"
 | |
|     or die "Can't read trace log";
 | |
| 
 | |
| my @free_ptrs;
 | |
| while (<$fh>) {
 | |
|   chomp;
 | |
|   if (/free.*ptr=(0x[0-9a-f]+).*/i) {
 | |
|     my $ptr = $1;
 | |
|     push @free_ptrs, $ptr;
 | |
|   }
 | |
| }
 | |
| 
 | |
| for (my $idx = 0; $idx < @free_ptrs; $idx++) {
 | |
|   $free_ptrs_map{$free_ptrs[$idx]} = $idx;
 | |
| }
 | |
| 
 | |
| # rewind to begin
 | |
| seek $fh, 0, 0;
 | |
| 
 | |
| while (<$fh>) {
 | |
|   chomp;
 | |
|   if (/alloc.*size=([0-9]+).*ptr=(0x[0-9a-f]+).*/i) {
 | |
|     my $size = $1;
 | |
|     my $ptr = $2;
 | |
|     my $idx = $free_ptrs_map{$ptr};
 | |
|     if (defined $idx) {
 | |
|       say "1 $idx $size";
 | |
|     } else {
 | |
|       say "1 -1 $size";
 | |
|     }
 | |
|   } elsif (/free.*ptr=(0x[0-9a-f]+).*/i) {
 | |
|     my $ptr = $1;
 | |
|     my $idx = $free_ptrs_map{$ptr};
 | |
|     say "2 $idx";
 | |
|   }
 | |
| }
 | |
| 
 | |
| close $fh;
 | 
