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

标签 objective-c ios logging nslog

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

使用 NSLog 有什么优势吗?

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

最佳答案

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

通过断点/GDB 调试的优点

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

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

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

日志记录的优点

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

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

DLog(仅记录 DEBUG 构建)

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

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

关于objective-c - NSLog 与 Xcode 断点记录和创建日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379834/

相关文章:

logging - 在服务器上部署 Shiny 应用程序时,如何将标准输出写入日志文件?

windows - 从非托管代码写入 NUnit 的文本输出选项卡

logging - 并行 MATLAB 和日志记录

objective-c - 无法解释的错误访问错误

iOS App 内部控制权转移

ios - TableView :viewForHeaderInSection: default value?

ios - 存在哪些 WiFi-Direct 库?

ios - 将填充设置为文本字段卡住我的屏幕

ios - 如何拦截来自共享扩展的远程通知?

ios - 如何从 MonoTouch 中的不同项目加载图像文件