跳到主要内容

Crash 排查

问题

线上 App 频繁崩溃,如何定位和修复?

答案

排查流程

符号化

# 使用 atos 符号化
atos -arch arm64 -o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp -l 0x100000000 0x10000abcd

常见崩溃类型及修复

崩溃信号常见原因修复方向
EXC_BAD_ACCESS野指针、已释放对象Zombie Objects 检测
SIGABRT数组越界、未实现协议方法检查 NSException 信息
EXC_BREAKPOINTSwift fatalError、强制解包 nilguard let 替代 !
SIGKILL (0x8badf00d)启动/后台超时被系统杀减少主线程耗时
EXC_RESOURCE内存/CPU 超限优化资源使用

Address Sanitizer

// Xcode Scheme → Diagnostics → Address Sanitizer
// 可检测:
// - Use-after-free
// - Buffer overflow
// - Stack buffer overflow

常见面试问题

Q1: 如何建立 Crash 治理体系?

答案

  1. 监控:接入 Sentry / Firebase Crashlytics,每日看 Top Crash
  2. 止血:P0 崩溃 24h 内修复,灰度验证
  3. 防劣化:CI 集成 Crash 率监控,新版本 Crash 率高于阈值自动暂停发布
  4. 目标:整体 Crash 率 < 0.1%(千分之一)

Q2: dSYM 文件是什么?

答案:Debug Symbol 文件,包含代码地址到源码行的映射。Release 构建会 strip 掉符号信息,崩溃堆栈只有内存地址。需要用 dSYM 文件还原出具体函数名和行号。每次 Archive 必须保存对应的 dSYM。

相关链接