⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isip_dmalloc_run.pl

📁 这是一个从音频信号里提取特征参量的程序
💻 PL
字号:
#! @PERL@# file: $isip/util/devel/dmalloc_run/isip_dmalloc_run.pl## load the command_line source#require "$ENV{'ISIP'}/lib/scripts/perl/command_line.pm";$DEF_MODE = "isip_runtime";$DEF_RC_FILE = "$ENV{ISIP}/login/debugger_gdb_dmallocrc.text";# define the help function to be called if -help is present on the# command line. this should print a help file to the screen.#$ISIP_HELP_FILE = <<__ISIP_HELP_HERE_FILE__;name: dmalloc_runsynopsis: isip_dmalloc_run [options] executabledescr: run the executable with dmalloc turned onexample: dmalloc_run String.exeoptions: -mode: what mode to run dmalloc with (def = isip_runtime, isip_high, etc) -static: should we parse away the static memory errors? -verbose: print wrapper commands before executionarguments: executable to runman page: none__ISIP_HELP_HERE_FILE__# parse the command line#($mode,$static,$verbose,@exec_str) = command_line(-1,"-mode", 1,"-static",0,						  "-verbose", 0);$executable = $exec_str[0];if (!(-e $executable)) {    isip_die("you must specify an executable");}if ($static eq "") {    $static = 0;} else {    $static = 1;}if ($mode eq "") {    $mode = $DEF_MODE;}# create a string that will call isip_dmalloc#$com_str = "dmalloc -b -f $DEF_RC_FILE $mode -p print-messages";if ($static) {    $com_str = "$com_str -p log-trans";}# setup dmalloc#open(FP,"$com_str|") or isip_die("cannot run dmalloc");if ($verbose) {    print "$com_str\n";}while(<FP>) {    if ($verbose) {	print;    }    if (/DMALLOC_OPTIONS=(.*)$/) {	$ENV{DMALLOC_OPTIONS} = $1;    }}close(FP);print "set dmalloc to $ENV{DMALLOC_OPTIONS}\n";# run the executable#$executable = join(' ',@exec_str);open(FP,"$executable 2>&1 |") or isip_die("cannot run executable");$state = 0;$prefix = "";LINE: while(<FP>) {    if (!$static) {	print;    } else {	if (/checking heap/) {	    next LINE;	}	if ($state == 0) {	    if (/^\d+:\s+\d+: \*\*\* alloc: at .*? for (\d+) bytes, got .(0x.*?)\|/) {#		print "mode = alloc, ptr = $2, size = $1\n";	    }	    elsif (/^\d+:\s+\d+: \*\*\* free: at .*? pnt .(0x.*?)\|.*?size (\d+),/) {#		print "mode = free, ptr = $1, size = $2\n";	    }	    elsif (/^(.*?): final user memory space/) {		print;		$state = 1;		$prefix = $1;	    }	    else {		print;	    }	} elsif ($state == 1) {	    	    if (/^\d+:\s+\d+: \*\*\* alloc: at .*? for (\d+) bytes, got .(0x.*?)\|/) {		print "$prefix: *** alloc after shutdown, ptr = $2, size = $1 bytes\n";	    }	    elsif (/^\d+:\s+\d+: \*\*\* free: at .*? pnt .(0x.*?)\|.*?size (\d+),/) {		$ptr = $1;		$size = $2;		#print "mode = free, ptr = $1, size = $2\n";		if (defined($UNFREED_HASH{$ptr})) {		    if ($UNFREED_SIZES{$ptr} eq $size) {			#printf "$prefix: memory at $ptr ($size bytes) accounted for\n";			undef $UNFREED_HASH{$ptr};			undef $UNFREED_SIZES{$ptr};			undef $UNFREED_RA{$ptr};		    }		    else {			printf "$prefix: *** memory at $ptr size mismatch\n";		    }		}		else {		    printf "$prefix: *** unregisted memory freed at $ptr\n";		}	    }	    elsif (/ending time/) {		print;		print "$prefix: ISIP: performing accounting of static memory\n";	    } elsif (/not freed: (\'(0x.*?)\|.*?) \((\d+) bytes\) from \'(.*)\'/) {		$unfreed = $2;		$size = $3;		$UNFREED_HASH{$unfreed} = $1;		$UNFREED_SIZES{$unfreed} = $size;		$UNFREED_RA{$unfreed} = $4;		#print "unfreed memory = $unfreed; size = $size\n";	    }	    else {		print;	    }	}    }}if ($static) {    @keys = keys(%UNFREED_HASH);    $num = 0;    $bytes = 0;        foreach $key (@keys) {	$ptr = $UNFREED_HASH{$key};	if ($ptr ne "") {	    print "$prefix: ISIP: not freed: $UNFREED_HASH{$key}, ($UNFREED_SIZES{$key} bytes) from $UNFREED_RA{$key}\n";	    $bytes += $UNFREED_SIZES{$key};	    $num ++;	}    }        if ($num > 0) {	print "$prefix: ISIP: unknown memory not freed: $num pointers, $bytes bytes\n";    } else {	print "$prefix: ISIP: all memory accounted for\n";    }}close(FP);## end of file

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -