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

因为代码使用的printf,是不记录的,你把源代码里的printf输出改成NSLog就可以了,或者你用别的方式查看,比如在终端ssh连上手机,输出就会显示出来了

哥们你太敏感了,我们并没有理解出这层意思,人家的意思是"英雄所见略同"吧,和气生财和气生财…

恩,我也觉得和气生财的好。不过,仅是为了实现『勾一个类所有方法的执行顺序』,其实不用这么大费周折。分享个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 个赞

为什么我试了一下,并没有东西输出

如果你Theos的logify.pl都没输出东西,那我的logifyEx.pl就更输出不了东西了… 所以,你要运行到你logify了的那个类/实例的方法才行…啊…

不要告诉我你只是拿了我上面的源码然后就试。。。

logify.pl的源码在[path_to_your_theos]/bin/logify.pl。又或者你机子的这里/opt/theos/bin/logify.pl ?!

没有的话,去Theos github上clone一份。

没有没有,我说楼主的代码,那个BigBang

看下源码,print是不在终端输出的,你可以改nslog或者直接在xcode也可以看到print

噢噢,那我试试

试了下,发现闪退= =。还没有logify.pl好用

闪退很多原因的吧,反正我第一次用改了一下还能,现在也没用过了

这是个好东西

GitHub提了个issue

为什么我使用崩溃
@try {
NSString *objString=[NSString stringWithFormat:@"%@",object];
Thread 1: EXC_BAD_ACCESS (code=2, address=0x16f9e7f48)