NSLog与Xcode断点记录和创建日志文件

时间:2012-02-21 15:05:10

标签: objective-c ios logging nslog

您是否建议使用NSLog或Xcode提供的日志记录功能来进行调试?

使用NSLog有什么好处吗?

对于在客户设备上运行的应用:是否有一种简单的方法可以将NSLog或等效输出记录到文件或Web服务中?

1 个答案:

答案 0 :(得分:4)

就个人而言,我建议同时使用日志记录(通过NSLog)以及设置断点。也许你的问题是你何时应该使用其中一个。

通过断点/ GDB调试的优点

  • 停止程序流程(如果您不想停止程序流程,请使用日志记录)
  • 显示所有本地变量
  • 可以传递客观c消息并进行c调用。灵活的方式即时回答您可能对当前状态提出的问题。

当您想要进入代码并逐步观察发生的事情时,断点是很好的。单步执行代码的一些优点包括能够检查您喜欢的任何变量并能够通过gdb执行代码(有关gdb技巧的更多信息,请参阅Objective-C Debugging tips in Xcode4?)。断点也很方便,因为您不必重新编译和添加日志语句。

另见How to set a conditional breakpoint in Xcode based on an object string property?

记录的优点

  • 不会中断程序流程
  • 提供聚合调试数据的方法
  • 可以通过Organizer在其他设备上查看
  • 如果将TestFlight与TestFlight SDK一起使用,则可以捕获会话中的日志,这在应用程序崩溃时尤为明显。

日志非常适合您始终希望看到的信息。例如,下载资源的应用程序可能希望记录下载的每个资源(网址以及您可能希望的其他任何信息)。我喜欢使用名为DLOG的宏创建条件日志,以便我可以看到更多详细的日志仅用于开发,但是将这些日志剥离出来用于发布版本。

DLog(仅针对DEBUG构建的日志记录)

#ifdef DEBUG
    #define DLog(...) NSLog(__VA_ARGS__)
#else
    #define DLog(...) /* */
#endif

这只会为DEBUG版本发出NSLog消息。您可以添加类似的功能,以便为应用程序的复杂部分提供详细日志记录。当我调试拖动问题时,我发现让日志只是为了观察正在发生的事情(而不是逐步完成所有事情)通常很好。但是,当我完成功能的开发或修复问题时,我肯定不再对这些日志感兴趣,所以我通常会有条件地显示这些日志,这样如果我以后遇到问题,我可以再次查看日志