我编写了一个调试宏,只要全局kDebug
标志== YES
,就会向控制台打印传入的字符串。
每当调用任何方法时,我都需要打印出方法的名称及其类名。
当我仔细检查每个方法并在字符串中写出类的名称和方法时,这很好。
当调用Objective-C中的任何方法时,是否有任何特殊的处理程序被调用,如果是这样,有没有办法可以覆盖它来调用我的调试宏?
这样做的全部目的是让我不必遍历代码中的每个方法,并在调试宏调用中手动编写方法签名。
答案 0 :(得分:6)
如果您正在寻找方法记录工具,而不是构建自己的方法,那么实际上是在Objective-C运行时中构建了一个。
您可能想要阅读Apple的Technote 2124的Objective-C部分: Technical Note TN2124: Mac OS X Debugging Magic
我还建议阅读Dave Dribin关于使用运行时工具跟踪消息的博客文章。你可以在这里找到:Tracing Objective-C messages - Dave Dribin's Blog。 Dave注意到一个被调用的logObjCMessageSend
函数,您可以使用它来自定义日志记录行为。使用起来有点棘手,但Dave提供了成功使用它所需的信息。
答案 1 :(得分:4)
看看Dtrace。 Instruments提供GUI界面。例如,您可以提供一个正则表达式来匹配您要记录的所有方法。
答案 2 :(得分:0)
听起来你正在寻找__PRETTY_FUNCTION__
宏......但是接受的答案可能是更好的方法。
答案 3 :(得分:0)
我在此处提出类似问题http://zippy.gfycat.com/WeepyBoldAsiandamselfly.mp4
之后,我最终得到了这段代码- (BOOL)respondsToSelector:(SEL)aSelector {
if(aSelector){
NSLog(@"%@", NSStringFromSelector(aSelector));
}
return [super respondsToSelector:aSelector];
}