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

Ale*_*exR 3 logging objective-c nslog ios

您是否更愿意推荐使用 NSLog 或 Xcode 提供的日志记录功能作为断点进行调试?

使用 NSLog 有什么优点吗?

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

Sam*_*Sam 5

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

通过断点/GDB 调试的优点

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

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

另请参阅如何根据对象字符串属性在 Xcode 中设置条件断点?

日志记录的优点

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

日志非常适合提供您始终想查看的信息。例如,下载资源的应用程序可能想要记录下载的每个资源(url 以及您可能希望的任何其他信息)。我喜欢使用名为 的宏创建条件日志DLOG,这样我就可以看到更多用于开发的详细日志,但在发布版本中将其删除。

DLog(仅用于调试构建的日志记录)

#ifdef DEBUG
    #define DLog(...) NSLog(__VA_ARGS__)
#else
    #define DLog(...) /* */
#endif
Run Code Online (Sandbox Code Playgroud)

这只会为DEBUG构建发出 NSLog 消息。您可以添加类似的功能,以方便对应用程序的复杂部分进行详细日志记录。当我调试拖动问题时,我发现使用日志来观察正在发生的事情(而不是逐步执行所有操作)通常很好。但是,当我完成功能开发或解决问题后,我肯定对这些日志不再感兴趣,因此我通常会有条件地显示这些日志,以便以后遇到问题时可以再次查看日志。

  • 如果您愿意,断点只会停止程序流程。您可以创建仅记录断点。 (4认同)