恩,我也觉得和气生财的好。不过,仅是为了实现『勾一个类所有方法的执行顺序』,其实不用这么大费周折。分享个Trick,大牛别笑话我:
大家都用过Theos
的logify.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基础上,再写个简单的脚本分析一下弄个更人性化的输出,不用细心,扫一眼就知道所谓的『执行顺序』了)