mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-12-09 08:51:18 +08:00
60 lines
1.7 KiB
Plaintext
60 lines
1.7 KiB
Plaintext
|
Subject: [nasm-devel] tool to help find memory leaks
|
||
|
Date: Fri, 02 Nov 2001 22:08:01 -0500
|
||
|
From: Ed Beroset <beroset@mindspring.com>
|
||
|
Reply-To: nasm-devel@yahoogroups.com
|
||
|
To: nasm-devel@yahoogroups.com
|
||
|
|
||
|
Here's a little Perl script I wrote a while ago to help track down memory
|
||
|
leaks in nasm. First, compile nasm with LOGALLOC defined (see
|
||
|
nasmlib.c). That creates a log file of all allocs and frees. This Perl
|
||
|
script reads that file and tells you which source code lines caused a leak
|
||
|
(or a free of unallocated memory). There are many leaks, almost all of
|
||
|
them in the preprocessor.
|
||
|
|
||
|
-+--- findleak.pl begins
|
||
|
#!/usr/bin/perl
|
||
|
my %mem = {};
|
||
|
my %alloc = {};
|
||
|
while(<>)
|
||
|
{
|
||
|
if (/realloc\((0x[0-9a-f]+).*\).*returns \((0x[0-9a-f]+)/)
|
||
|
{
|
||
|
$mem{$1}--;
|
||
|
if ($mem{$1} != 0) {
|
||
|
print "free before alloc! $_";
|
||
|
}
|
||
|
if ($mem{$2} != 0) {
|
||
|
print "memory leak! $_";
|
||
|
}
|
||
|
$mem{$2}++;
|
||
|
$alloc{$2} = $_;
|
||
|
}
|
||
|
elsif (/free\((0x[0-9a-f]+)/)
|
||
|
{
|
||
|
$mem{$1}--;
|
||
|
if ($mem{$1} != 0) {
|
||
|
print "free before alloc! $_";
|
||
|
}
|
||
|
}
|
||
|
elsif (m/returns (0x[0-9a-f]+)/)
|
||
|
{
|
||
|
if ($mem{$1} != 0) {
|
||
|
print "memory leak! $_";
|
||
|
}
|
||
|
$mem{$1}++;
|
||
|
$alloc{$1} = $_;
|
||
|
}
|
||
|
}
|
||
|
foreach $goo (sort keys %mem)
|
||
|
{
|
||
|
if ($mem{$goo})
|
||
|
{
|
||
|
print "$mem{$goo} $alloc{$goo}";
|
||
|
}
|
||
|
}
|
||
|
-+--- findleak.pl ends
|
||
|
|
||
|
|
||
|
|
||
|
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
|