2

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

4

3 回答 3

3

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

 NSLog(@"%s",__PRETTY_FUNCTION__);

在每一种方法中。

于 2013-03-07T22:49:35.510 回答
2

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

于 2013-03-07T22:43:24.587 回答
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,这样所有的 NLogs 都会消失。

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

-[ApplicationDelegate applicationDidBecomeActive:]:86  applicationDidBecomeActive called!

该解决方案基于这些较早的帖子:

  1. 如何打印出方法名称和行号并有条件地禁用 NSLog?
  2. 我需要在发布应用程序之前禁用 NSLog 吗?

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

于 2013-03-07T23:28:16.650 回答