代码之家  ›  专栏  ›  技术社区  ›  Jacob Relkin

每次调用任何方法时都要调用宏-Objective C

  •  5
  • Jacob Relkin  · 技术社区  · 16 年前

    我编写了一个调试宏,每当全局 kDebug 旗帜== YES .

    每当调用任何方法时,我都需要打印出一个方法的名称和它的类名。

    当我费力地遍历每个方法并将类和方法的名称写在一个字符串中时,这就很好了。

    当Objective-C中的任何方法被调用时,是否有任何特殊的处理程序被调用,如果有,是否有某种方法可以重写它来调用我的调试宏?

    这样做的全部目的是,我不必遍历代码中的每个方法,并在调试宏调用中手工编写方法签名。

    4 回复  |  直到 13 年前
        1
  •  6
  •   Jay O'Conor    16 年前

    如果您正在寻找一个方法日志记录工具,而不是构建自己的工具,那么一个工具实际上是构建在Objective-C运行时中的。

    您可能需要阅读苹果Technote2124的Objective-C部分: Technical Note TN2124: Mac OS X Debugging Magic

    我还建议您阅读Dave Dribin关于使用运行时的工具跟踪消息的博客文章。你可以在这里找到: Tracing Objective-C messages - Dave Dribin's Blog . 戴夫注意到 logObjCMessageSend 函数,您可以使用它自定义日志记录行为。使用起来有点棘手,但Dave提供了成功使用它所必需的信息。

        2
  •  4
  •   Ken    16 年前

    看一看 Dtrace . Instruments 提供GUI界面。比如说,您可以提供一个正则表达式来匹配所有要记录的方法。

        3
  •  0
  •   Grady Player    13 年前

    听起来你在找 __PRETTY_FUNCTION__

        4
  •  0
  •   Community Mohan Dere    9 年前

    在这里问了一个类似的问题之后,我最终得到了这个代码 How can I log names of each called class method in Objective-C?

    - (BOOL)respondsToSelector:(SEL)aSelector {
        if(aSelector){
            NSLog(@"%@", NSStringFromSelector(aSelector));
        }
        return [super respondsToSelector:aSelector];
    }