返回首页

iOS 日志收集:7 种调试方法

本文介绍了 7 种收集 iOS 日志的方法:通过 sysdiagnose 获取 .ips、log collect CLI、Console。崩溃示例包括 EXC_BAD_ACCESS、JetsamEvent、网络错误。用于在无需 Xcode 的情况下分析性能和 bug。

7 种 iOS 日志方法:sysdiagnose 和 CLI
Advertisement 728x90

# 调试 iOS 应用:收集系统日志的 7 种方法

iOS 日志记录应用内部事件:网络请求、错误、UI 冻结和崩溃。这些日志有助于在没有视觉指示的情况下精确定位问题。例如,Pokemon GO 中的 EXC_BAD_ACCESS、Console 中的主线程 I/O 操作,以及 log collect 中的 CFNetwork 超时。

日志分为崩溃报告(EXC_BAD_ACCESS、SIGSEGV)和诊断报告(性能、网络、内存)。测试人员使用它们来验证函数调用、分析服务器交互,并发现隐藏 bug。

通过 sysdiagnose 获取 .ips 文件

自动生成的报告可在“设置 → 隐私与安全性 → 分析与改进 → 分析数据”中找到。格式:event_type_date_time.ips,例如 AtiClient-2024-08-14-152242.ips

Google AdInline article slot

报告类型:

  • CrashReport:异常和信号(按 bundle ID,例如 VKClient)。
  • JetsamEvent:由于内存不足卸载(内存泄漏)。
  • Watchdog:启动超时或挂起。
  • SpinReport:高 CPU 使用率无响应(死锁)。
  • NotificationServiceExtension:推送通知失败。

手动生成:同时按下音量键 + 侧边按钮(1–1.5 秒),生成文件 stacks

通过 AirDrop 导出。文件会自动删除——立即收集。

Google AdInline article slot

使用场景:无 Xcode 的故障、内存/网络分析。

log collect CLI:用于归档的命令行工具

需要 Xcode 命令行工具、USB 连接、Terminal。通过 libimobiledevice 获取 UDID。

收集长达 10 天的日志(相较 sysdiagnose 的瞬间快照)。更快、可自动化、可控制大小。

Google AdInline article slot

基本命令:

sudo log collect --device-udid <UDID> --last 10m --output iphone_logs.logarchive

关键参数:

  • --output ~/Desktop/iphone_logs.logarchive — 保存路径。
  • --last 30m / 2h / 1d — 时间段。
  • --start "2025-08-20" --end "2025-08-20 14:30:00" — 日期。
  • --size 100m — 大小限制。
  • --device-udid A1B2C3D4R5F8G8H8I1J0 — 按 UDID(首选)。

分析:

log show --archive system_logs.logarchive --predicate 'process == "AtiClient" AND messageType == "error"'

过滤器:进程、错误、时间段。

与 sysdiagnose 比较:

| 参数 | log collect | sysdiagnose |

|----------|-------------|-------------|

| 时间 | 最长 10 天 | 生成当天 |

| 自动化 | 命令行 | 手动 |

| 大小 | 可控制 | 较大 |

| 速度 | 快 | 10–15 分钟 |

使用场景:不稳定 bug、性能趋势、崩溃上下文。

Console:实时监控

Xcode → 窗口 → 设备与模拟器 → 打开 Console。按进程过滤(例如 AtiClient)。显示实时信息:主线程挂起风险、libRPAC.dylib 失败。

示例日志:

Hang Risk com.apple.runtime-issues
message: This method does I/O on the main thread...
libRPAC.dylib failure 19:12:18.350727+0300 AtiClient

导出为 .logarchive 以进行离线分析。

方法 4–7:高级收集

  • Xcode 设备与模拟器:按 UDID 获取日志,按子系统过滤(CFNetwork、Jetsam)。
  • libimobiledevice:使用 idevicesyslog 无需 Xcode 流式传输日志。
idevicesyslog -u <UDID>
  • 代码中的 os_log:通过 os_log_tos_log API 添加自定义日志。级别:debug、info、error。
  • Instruments:带日志的性能分析(Time Profiler、Leaks)。

关键要点

  • .ips 用于即时故障(CrashReport、Jetsam)。
  • log collect 用于长期趋势(最长 10 天,命令行)。
  • Console 用于主线程 I/O 的实时调试。
  • 需要 UDID 以精确定位设备。
  • 结合使用:sysdiagnose + log show 进行完整分析。

— Editorial Team

Advertisement 728x90

继续阅读