查看Xcode中调用的方法

时间:2013-03-07 22:36:50

标签: iphone ios objective-c xcode

我有一个视图控制器,一遍又一遍地重新加载。我希望能够看到正在调用哪些方法,以便我可以看到一个持续触发重载的方法。我知道如果发生错误并且应用程序崩溃,我可以看到调用的内容。但是,在这种情况下,没有崩溃。有没有办法监控整个应用程序中调用的所有方法?

3 个答案:

答案 0 :(得分:3)

如果您是XCode和Objective C的新手并且正在寻找轻量级的东西并且您没有大型代码/许多方法,我会把:

 NSLog(@"%s",__PRETTY_FUNCTION__);

在每种方法中。

答案 1 :(得分:1)

使用仪器。在分析模式下启动代码并选择CPU时间工具。当应用程序运行时,Instruments会定期收集有关每个调用堆栈的信息,这样您就可以查看调用的内容。 (使用"反转调用树"选项查看给定函数的调用者。)

答案 2 :(得分:1)

我使用这个宏:

#define DEBUG 1

#if DEBUG
#   define NLog(fmt, ...) printf("%s\n", [[NSString stringWithFormat:@"%s:%d  %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:fmt, ##__VA_ARGS__]] UTF8String])
#else
#   define NLog(...)
#endif

然后我将我的Macros.h包含在我的Application_Prefix.pch文件中,以便它可以在任何地方使用。在发货之前,我将DEBUG设置为0,以便所有NLog都消失。

现在,我使用NLog而不是使用NSLog。输出看起来像这样:

-[ApplicationDelegate applicationDidBecomeActive:]:86  applicationDidBecomeActive called!

此解决方案基于这些早期帖子:

  1. How to print out the method name and line number and conditionally disable NSLog?
  2. Do I need to disable NSLog before release Application?
  3. 您可以将NLog调用放在多个位置,以便在视图控制器重新加载之前查看调用哪些函数。如果您需要知道触发重新加载的确切函数,最好的办法是设置一个断点并检查调用堆栈,正如其他人所提到的那样。