【问题标题】:NSLog output no where to be found, Xcode8NSLog输出无处可寻,Xcode 8
【发布时间】:2016-10-12 17:41:22
【问题描述】:

我正在尝试使用 NSLog 语句来确定我的应用程序的执行流程,所以我在 main.m 中就在 autoreleasepool 之后有一个:

@autoreleasepool {
    NSLog(@"app started"); //added breakpoint here, but debugger stopped at next line
    BOOL runningTests = NSClassFromString(@"XCTestCase") != nil; //stopped here instead of nslog.
    ...

现在,该声明已无处可寻。我试过搜索控制台,使用'command + /'为模拟器调出一个控制台并在那里搜索system.log,但仍然没有。为了查看我是否正在执行 main,我在日志语句上添加了一个断点并且它被击中,或者至少调试器在日志之后的语句上停止(如代码 sn-p 所示)。关于应用程序生命周期是否有一些我不明白的地方,例如在启动应用程序时是否会清除日志?我还希望在其他函数中调用其他 NSLog 语句,但它们也没有打印出来。为什么我的日志没有打印到控制台?

旁注:

我的控制台确实处于活动状态,我正在查看的输出是“所有输出”。

还有其他方法可以确定我的应用程序的执行流程吗?这是一个非常大的应用程序,有很多故事板和视图控制器。通过执行流程,我的意思是首先点击哪些视图,从这些视图调用哪些函数,当应用加载时应用如何确定下一个视图(取决于用户是否登录)等等......

提前致谢!

编辑: 我拥有的预处理器宏

【问题讨论】:

  • 你确定这行代码被调用了吗?使用调试器。在行上设置断点,看看是否被调用。
  • @rmaddy 是的,我做到了,但我想我在描述中模糊了我在哪里添加了断点。我用断点的位置更新了代码。
  • 是否有一些宏或某些东西将对NSLog 的调用转换为无操作?
  • 所以是的,我确定正在调用代码。或者至少在它被称为哈哈之后的那一行。
  • 我将如何找出是否存在所说的宏?

标签: ios objective-c xcode8


【解决方案1】:

NSlog 已执行但隐藏在许多其他控制台调试输出中以解决此问题:

In Xcode8: 

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

添加OS_ACTIVITY_MODE并检查它,但不要添加任何值。

【讨论】:

  • hmm,尝试设置为 OS_ACTIVITY_MODE 值禁用,OS_ACTIVITY_MODE - 不带引号
【解决方案2】:

感谢 Andrew Veresov 和 rmaddy,我能够解决这个问题。问题是我在 product->scheme 中选择了 Appstore 方案。我必须将其更改为开发方案才能打印所有日志。我不确定这到底是如何工作的,因为即使其他日志语句不打印,某些日志语句仍然会打印。如果有人可以详细说明计划及其工作方式,那么我将不胜感激。

更新:问题实际上是应用商店方案定义了一个正在摆脱 NSLogs 的宏:

#ifndef __OPTIMIZE__
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#define NSLog(...) {;}
#endif

因此,当我更改方案时,不再使用此宏,如果您遇到此问题,请按照 drekka 所说的操作:“...对 '#define NSLog' 进行全局搜索,看看会出现什么。”您可以删除宏,您的日志就会显示出来。

感谢一群 drekka 指出这一点!

【讨论】:

  • 不会是方案问题。这将是一个特定的方案导致一个宏激活。我的猜测是在你的一个 pod 中的某个地方定义了一个宏,它覆盖了 NSLog。我会在全球范围内搜索“#define NSLog”,看看会发生什么。然后我会摆脱那个豆荚。像这样覆盖 NSLog 是个坏主意。
  • 您说的没错,Appstore 方案中定义了一个不打印日志语句的宏。很棒的答案。
猜你喜欢
  • 1970-01-01
  • 2014-02-07
  • 2015-01-02
  • 1970-01-01
  • 2023-03-19
  • 2013-04-04
  • 1970-01-01
  • 2016-05-15
  • 2016-10-10
相关资源
最近更新 更多