【问题标题】:NSLog vs. Xcode breakpoint logging and creating log filesNSLog 与 Xcode 断点记录和创建日志文件
【发布时间】:2012-02-21 15:05:10
【问题描述】:

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

使用 NSLog 有什么好处吗?

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

【问题讨论】:

标签: objective-c ios logging nslog


【解决方案1】:

就个人而言,我建议同时使用日志记录(通过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 消息。您可以添加类似的功能来促进对应用程序的复杂部分进行详细日志记录的形式。当我在调试拖拽问题时,我发现拥有日志只是为了观察正在发生的事情(而不是逐步完成所有事情)通常很好。但是,当我完成功能开发或解决问题时,我肯定不再对这些日志感兴趣,因此我通常会有条件地显示这些日志,以便以后遇到问题时可以再次查看日志.

【讨论】:

  • 断点仅在您需要时停止程序的流程。您可以创建仅日志断点。
  • 这个答案使日志听起来比实际好很多,断点比实际差很多 - 我提交了一个编辑,它采用了很多日志实际上没有的优势具有并添加了断点具有的一些优势。虽然我不知道如何处理 DLog 部分......这种东西在断点存在之前很有用,但我不确定它是否还有用。
猜你喜欢
  • 2011-02-12
  • 2020-05-14
  • 2010-11-20
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多