NSLog输出无法找到,Xcode8

时间:2016-10-12 17:41:22

标签: ios objective-c xcode8

我试图使用NSLog语句来计算我的应用程序的执行流程,所以我在autoreleasepool之后的main.m中有一个:

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

现在,该声明无处可寻。我尝试使用'命令+ /'来搜索控制台。为模拟器调出一个控制台并通过system.log搜索但仍然没有。为了查看我是否正在浏览main,我在日志语句中添加了一个断点并且它被命中,或者至少调试器在日志之后停止在语句上(如代码片段所示)。是否有一些我对应用程序生命周期无法理解的东西,例如在应用程序启动时某些时候是否清除了日志?我还希望在其他函数中有其他NSLog语句,但是它们也没有被打印。为什么我的日志没有打印到控制台?

附注:

我的控制台确实有效,我看到的输出是“所有输出”。

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

提前致谢!

编辑: 我有预处理器宏 enter image description here

2 个答案:

答案 0 :(得分:1)

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

In Xcode8: 

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

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

答案 1 :(得分:0)

感谢Andrew Veresov和rmaddy,我能够找出问题所在。问题是我在product->方案中选择了Appstore方案。我不得不将其更改为要打印的所有日志的开发方案。我不确定这是如何工作的,因为有些日志语句仍会打印,即使其他日志语句没有打印。如果有人能详细说明方案及其工作方式,那么我真的很感激。

更新:问题实际上是appstore方案定义了一个摆脱NSLogs的宏:

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

因此,当我改变方案时,这个宏不再被使用,如果你有这个问题就像drekka所说的那样:“......全球搜索'#define NSLog',看看会出现什么。”您可以删除宏,并显示日志。

感谢一大堆drekka指出这一点!