我试图使用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语句,但是它们也没有被打印。为什么我的日志没有打印到控制台?
附注:
我的控制台确实有效,我看到的输出是“所有输出”。
还有其他方法可以确定我的应用程序的执行流程吗?它是一个非常大的应用程序,有很多故事板和视图控制器。通过执行流程,我的意思是首先点击哪些视图,从这些视图调用哪些函数,应用程序加载时应用程序如何确定下一个视图(取决于用户是否登录)等等...
提前致谢!
答案 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指出这一点!