勾微信一个类所有方法的执行顺序

恩,我也觉得和气生财的好。不过,仅是为了实现『勾一个类所有方法的执行顺序』,其实不用这么大费周折。分享个Trick,大牛别笑话我:

大家都用过Theoslogify.pl了,打开它的源码,修改一下就好啦,在它return前再打印一下:

sub logLineForDeclaration {
my $declaration = shift;
$declaration =~ m/^[+-]\s*\((.*?)\).*?/;
my $rtype = $1;
my $innards = "%log; ";
if($rtype ne "void") {
	$innards .= "$rtype r = %orig; ";
	$innards .= "HBLogDebug(@\" = ".Logos::Method::formatCharForArgType($rtype)."\", ".Logos::Method::printArgForArgType($rtype, "r")."); " if defined Logos::Method::printArgForArgType($rtype, "r");
	$innards .= "return r; ";
} else {
	$innards .= "%orig; ";
}
$innards .= "HBLogDebug(@\"Invoke done...\")";  // 大家好,我是新增的一行!!!
return "$declaration { $innards}\n";
}

好了,另存为logifyEx.pl吧,以后就用logifyEx.pl代替logify.pl。这样,以后你cat /var/log/syslog看输出 logifiy 的 log时,方法及对应行号一样『Invoke done…』之间的所有输出,都是该方法对里该类其它方法的调用。这样,不就看出顺序来了!

这是一种省事简单的方法,主要就是细心看一下log。
(在输出的log基础上,再写个简单的脚本分析一下弄个更人性化的输出,不用细心,扫一眼就知道所谓的『执行顺序』了)

2 个赞