【问题标题】:See what methods are being called in Xcode查看 Xcode 中调用了哪些方法
【发布时间】:2013-03-07 22:36:49
【问题描述】:

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

【问题讨论】:

  • 只需将NSLog("method called"); 放入方法中即可达到目的
  • 在 reload 方法的一般附近(甚至在其中)放置一个断点,以在 Xcode 中获取堆栈跟踪。
  • 使用调试器并在要检查的方法上设置断点。当代码到达该点时,执行将停止。查看调试器中的堆栈跟踪,看看是谁调用了它。
  • 好的,我会试一试@nsgulliver - 好主意!谢谢大家!
  • 使用NSLog而不是断点的问题是你看不到谁调用了这个方法,你也不能轻易地检查变量值。学习使用调试器。这是一个强大而有用的工具。

标签: iphone ios objective-c xcode


【解决方案1】:

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

 NSLog(@"%s",__PRETTY_FUNCTION__);

在每个方法中。

【讨论】:

  • 您不希望所有这些日志都出现在 Apple 的最终应用中。
  • @rmaddy 你也可以设置调试模式的日志
  • @rmaddy,同意 100%。这就是为什么我在问题前加上条件。
【解决方案2】:

使用乐器。以分析模式启动您的代码并选择 CPU 时间工具。当应用程序运行时,Instruments 将定期收集有关每个调用堆栈的信息,这将允许您查看什么调用了什么。 (使用“反转调用树”选项查看给定函数的调用者。)

【讨论】:

    【解决方案3】:

    我使用这个宏:

    #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 都消失。

    所以现在,我不使用 NSLog,而是使用 NLog。输出如下所示:

    -[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?

    您可以将 NLog 调用放在几个地方,以查看在视图控制器重新加载之前调用了哪些函数。如果您需要知道触发重新加载的确切函数,最好的办法是放置一个断点并检查调用堆栈,正如其他人提到的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-03
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多