普通视图

发现新文章,点击刷新页面。
今天 — 2026年1月25日首页

iOS 常用调试工具大全-打造你的调试武器库

作者 sweet丶
2026年1月25日 00:55

还记得你第一次使用NSLog(@"Hello, World!")的时刻吗?那是调试的起点。但随着应用复杂度呈指数级增长,我们需要的工具也经历了革命性进化:

  • 第一代:基础输出(NSLogprint
  • 第二代:图形化界面(Xcode调试器、Instruments)
  • 第三代:运行时动态调试(FLEX、Lookin)
  • 第四代:智能化监控(性能追踪、自动化检测)

今天,一个成熟的iOS开发者工具箱中,至少需要掌握3-5种核心调试工具,它们就像外科医生的手术刀——精准、高效、各有所长。

一、运行时调试工具

1. FLEX (Flipboard Explorer)

功能最全的运行时调试套件,集成后可以测试期间随时开启\关闭工具条,比如设置摇一摇后启动。

优点: 功能全面,无需连接电脑
缺点: 内存占用稍大
场景: 日常开发调试UI问题排查
GitHub: https://github.com/FLEXTool/FLEX?tab=readme-ov-file

主要功能:

  • 手机上检查和修改层次结构中的视图。
  • 查看对象内存分配,查看任何对象的属性和ivar,动态修改许多属性和ivar,动态调用实例和类方法。
  • 查看详细的网络请求历史记录,包括时间、标头和完整响应。
  • 查看系统日志消息(例如,来自NSLog)。
  • 查看沙盒中的文件,查看所有的bundle和资源文件,浏览文件系统中的SQLite/Rerm数据库。
  • 动态查看和修改NSUserDefaults值。

2. Lookin - 腾讯出品

3D视图层级工具,类Xcode Inspector和Reveal。相比Xcode中查看图层的优势有两个:

  • 独立于Xcode运行,不会被Xcode阻断,能显示view的被引用的属性名。
  • 集成了'LookinServer'库的APP启动后,在Mac上启动Lookin后即可刷新显示当前图层。(真机需连接电脑后才展示)
// 集成步骤一:官网下载lookin;
-  官网: https://lookin.work
-  GitHub: https://github.com/QMUI/LookinServer

// 集成步骤二:
CocoaPods安装:
// 1.如果是OC工程
pod 'LookinServer', :configurations => ['Debug']
// 2.如果是OC工程
// 在 iOS 项目的 Podfile 中 添加 “Swift” 这个 Subspec
pod 'LookinServer', :subspecs => ['Swift'], :configurations => ['Debug']
// 或者添加 “SwiftAndNoHook”这个 Subspec 也行
pod 'LookinServer', :subspecs => ['SwiftAndNoHook'], :configurations => ['Debug']

二、网络调试工具

1. Proxyman - 现代网络调试神器

// 官网: https://proxyman.io
// 特点:
 现代UI,操作流畅
 HTTPS解密(无需安装证书到系统)
 重放修改拦截请求
 Map Local/Map Remote功能
 脚本支持(JavaScript)
 支持Apple Silicon

使用场景:
 API接口调试
 图片/资源请求优化
 模拟慢速网络
 修改响应数据测试

2. Charles - 老牌网络代理

// 官网: https://www.charlesproxy.com
// 特点:
 功能极其全面
 跨平台支持
 脚本功能强大(Charles Proxy Script)
 带宽限制断点调试
 支持HTTP/2HTTP/3

设置步骤:
1. 安装Charles
2. 在iOS设备设置代理
3. 安装Charles根证书
4. 信任证书(设置通用关于证书信任设置)

// 常用功能:
 Breakpoints(请求拦截修改)
 Rewrite(规则重写)
 Map Local(本地文件映射)
 Throttle(网络限速)

3. mitmproxy - 开源命令行工具

# 官网: https://mitmproxy.org
# 特点:
✅ 完全开源免费
✅ 命令行操作,适合自动化
✅ 脚本扩展(Python)
✅ 支持透明代理

# 安装:
brew install mitmproxy

# 使用:
# 启动代理
mitmproxy --mode transparent --showhost

# iOS设置:
# 1. 安装证书: mitm.it
# 2. 配置Wi-Fi代理

三、UI/布局调试工具

1. Reveal - 专业的UI调试工具

// 官网: https://revealapp.com
// 特点:
 实时3D视图层级
 详细的AutoLayout约束查看
 内存图查看器
 支持SwiftUI预览
 强大的筛选和搜索

// 集成:
// 方式1: 通过Reveal Server框架
pod 'Reveal-SDK', :configurations => ['Debug']

// 方式2: LLDB加载(无需集成代码)
(lldb) expr (void)[[NSClassFromString(@"IBARevealLoader") class] revealApplication];

// 价格: 付费(提供免费试用)

2. InjectionIII - 热重载神器

// GitHub: https://github.com/johnno1962/InjectionIII
// 特点:
 代码修改后实时生效
 无需重新编译运行
 支持Swift和Objective-C
 保留应用状态

// 安装:
# App Store搜索 "InjectionIII"

// 配置:
1. 下载安装InjectionIII
2. 在AppDelegate中配置:
#if DEBUG
Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle")?.load()
#endif

3. 项目添加文件监视:
// 在InjectionIII App中添加项目路径

四、性能调试工具

1. Xcode Instruments - 官方性能分析套件

// 核心工具集:
┌─────────────────────────────────────┐
          Xcode Instruments          
├─────────────────────────────────────┤
 Time Profiler    # CPU使用分析       
 Allocations      # 内存分配分析      
 Leaks           # 内存泄漏检测      
 Network         # 网络活动分析      
 Energy Log      # 电量消耗分析      
 Metal System    # GPU性能分析       
 SwiftUI         # SwiftUI性能分析   
└─────────────────────────────────────┘

// 使用技巧:
1. 录制时过滤系统调用:
   Call Tree:  Hide System Libraries
               Invert Call Tree
               Flattern Recursion

2. 内存图调试:
   Debug Memory Graph按钮
   查看循环引用内存泄漏

3. 使用Markers:
   import os
   let log = OSLog(subsystem: "com.app", category: "performance")
   os_signpost(.begin, log: log, name: "Network Request")
   // ... 操作
   os_signpost(.end, log: log, name: "Network Request")

2. MetricKit - 线上性能监控框架

// Apple官方性能数据收集框架
import MetricKit

class MetricKitManager: MXMetricManagerSubscriber {
    static let shared = MetricKitManager()
    
    private init() {
        let manager = MXMetricManager.shared
        manager.add(self)
    }
    
    func didReceive(_ payloads: [MXMetricPayload]) {
        // 接收性能数据
        for payload in payloads {
            print("CPU: \(payload.cpuMetrics)")
            print("内存: \(payload.memoryMetrics)")
            print("启动时间: \(payload.launchMetrics)")
            print("磁盘IO: \(payload.diskIOMetrics)")
        }
    }
    
    func didReceive(_ payloads: [MXDiagnosticPayload]) {
        // 接收诊断数据(崩溃、卡顿等)
    }
}

// 需要用户授权,适合生产环境监控

3. Tracy - 腾讯开源的性能监控

// GitHub: https://github.com/Tencent/tracy
// 特点:
 卡顿监控(主线程阻塞检测)
 内存泄漏检测
 大对象分配监控
 网络性能监控
 崩溃收集

// 集成:
pod 'Tracy', :configurations => ['Debug']

// 使用:
Tracy.start()
// 自动监控各种性能指标

五、内存/崩溃调试工具

1. MLeaksFinder - 腾讯出品的内存泄漏检测

// GitHub: https://github.com/Tencent/MLeaksFinder
// 特点:
 自动检测视图控制器内存泄漏
 无需编写任何代码
 支持自定义白名单
 精准定位泄漏对象

// 原理:
// 监听UIViewController的pop/dismiss
// 延迟检查是否仍然存在

// 集成:
pod 'MLeaksFinder'

// 自定义配置:
// 1. 添加白名单
[NSClassFromString(@"WhiteListClass") class]

// 2. 忽略特定泄漏
[MLeaksFinder addIgnoreClass:[IgnoreClass class]]

2. FBRetainCycleDetector - Facebook循环引用检测

// GitHub: https://github.com/facebook/FBRetainCycleDetector
// 特点:
 检测Objective-C对象的循环引用
 支持检测NSTimer的强引用
 可集成到单元测试中
 Facebook内部广泛使用

// 使用:
let detector = FBRetainCycleDetector()
detector.addCandidate(myObject)
let cycles = detector.findRetainCycles()

// 输出格式化的循环引用链
for cycle in cycles {
    print(FBRetainCycleDetectorFormatter.format(cycle))
}

3. KSCrash - 强大的崩溃收集框架

// GitHub: https://github.com/kstenerud/KSCrash
// 特点:
 捕获所有类型崩溃(OC异常C++异常Mach异常等)
 生成完整的崩溃报告
 支持符号化
 可自定义上报服务器

// 集成:
pod 'KSCrash'

// 配置:
import KSCrash

let installation = makeEmailInstallation("crash@company.com")
installation.addConditionalAlert(withTitle: "Crash Detected",
                                message: "The app crashed last time")
KSCrash.shared().install()

// 高级功能:
// 1. 用户数据记录
KSCrash.shared().userInfo = ["user_id": "123"]

// 2. 自定义日志
KSCrash.shared().log.error("Something went wrong")

// 3. 监控卡顿
KSCrash.shared().monitorDeadlock = true

六、日志调试工具

1. CocoaLumberjack - 专业日志框架

// GitHub: https://github.com/CocoaLumberjack/CocoaLumberjack
// 特点:
 高性能日志记录
 多日志级别(Error, Warn, Info, Debug, Verbose)
 多种输出目标(Console, File, Database)
 日志轮转和清理
 支持Swift和Objective-C

// 集成:
pod 'CocoaLumberjack/Swift'

// 配置:
import CocoaLumberjackSwift

// 控制台日志
DDLog.add(DDOSLogger.sharedInstance)

// 文件日志
let fileLogger = DDFileLogger()
fileLogger.rollingFrequency = 60 * 60 * 24 // 24小时
fileLogger.logFileManager.maximumNumberOfLogFiles = 7
DDLog.add(fileLogger)

// 使用:
DDLogError("错误信息")
DDLogWarn("警告信息")
DDLogInfo("普通信息")
DDLogDebug("调试信息")
DDLogVerbose("详细信息")

// 上下文过滤:
let context = 123
DDLogDebug("带上下文的消息", context: context)

2. SwiftyBeaver - Swift专用日志框架

// GitHub: https://github.com/SwiftyBeaver/SwiftyBeaver
// 特点:
Swift实现
 彩色控制台输出
 多种目的地(Console, File, Cloud)
 平台同步(macOS App)
 支持emoji和格式化

// 使用:
import SwiftyBeaver
let log = SwiftyBeaver.self

// 添加控制台目的地
let console = ConsoleDestination()
console.format = "$DHH:mm:ss$d $L $M"
log.addDestination(console)

// 添加文件目的地
let file = FileDestination()
file.logFileURL = URL(fileURLWithPath: "/path/to/file.log")
log.addDestination(file)

// 日志级别:
log.verbose("详细")    // 灰色
log.debug("调试")      // 绿色
log.info("信息")       // 蓝色
log.warning("警告")    // 黄色
log.error("错误")      // 红色

3. XCGLogger - 功能丰富的日志框架

// GitHub: https://github.com/DaveWoodCom/XCGLogger
// 特点:
 高度可配置
 支持日志过滤
 自定义日志目的地
 自动日志轮转
 详细的文档

// 使用:
import XCGLogger

let log = XCGLogger.default

// 配置
log.setup(level: .debug,
          showLogIdentifier: false,
          showFunctionName: true,
          showThreadName: true,
          showLevel: true,
          showFileNames: true,
          showLineNumbers: true,
          showDate: true)

// 自定义过滤器
log.filters = [
    Filter.Level(from: .debug),  // 只显示.debug及以上
    Filter.Path(include: ["ViewController"], exclude: ["ThirdParty"])
]

log.debug("调试信息")
log.error("错误信息")

七、自动化调试工具

1. Fastlane - 自动化工具集

# 官网: https://fastlane.tools
# 特点:
✅ 自动化构建、测试、部署
✅ 丰富的插件生态
✅ 与CI/CD深度集成
✅ 跨平台支持

# 常用命令:
fastlane screenshots    # 自动截图
fastlane beta          # 发布测试版
fastlane release       # 发布正式版
fastlane match         # 证书管理

# 集成调试功能:
lane :debug_build do
  # 1. 设置调试配置
  update_app_identifier(
    app_identifier: "com.company.debug"
  )
  
  # 2. 启用调试功能
  update_info_plist(
    plist_path: "Info.plist",
    block: proc do |plist|
      plist["FLEXEnabled"] = true
      plist["NSAllowsArbitraryLoads"] = true
    end
  )
  
  # 3. 构建
  gym(
    scheme: "Debug",
    export_method: "development"
  )
end

2. slather - 代码覆盖率工具

# GitHub: https://github.com/SlatherOrg/slather
# 特点:
✅ 生成代码覆盖率报告
✅ 支持多种输出格式(html, cobertura, json)
✅ 与CI集成
✅ 过滤第三方库代码

# 安装:
gem install slather

# 使用:
# 1. 运行测试并收集覆盖率
xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 14' -enableCodeCoverage YES

# 2. 生成报告
slather coverage --html --show --scheme MyApp MyApp.xcodeproj

# 3. 在Jenkins中集成
slather coverage --input-format profdata --cobertura-xml --output-directory build/reports MyApp.xcodeproj

八、特殊场景调试工具

1. SparkInspector - 实时对象监控

// 官网: https://sparkinspector.com
// 特点:
 实时监控所有对象实例
 查看对象属性变化
 方法调用追踪
 内存泄漏检测

// 集成:
// 1. 下载Spark Inspector应用
// 2. 集成框架到项目
// 3. 通过Spark Inspector连接调试

// 适用场景:
 复杂的对象关系调试
 观察模式数据流
 内存泄漏定位

3. LLDB - 底层调试神器

# Xcode内置,但功能极其强大
# 常用命令:

# 1. 查看变量
(lldb) po variable
(lldb) p variable
(lldb) v variable

# 2. 修改变量
(lldb) expr variable = newValue

# 3. 调用方法
(lldb) expr [self doSomething]
(lldb) expr self.doSomething()

# 4. 断点命令
(lldb) breakpoint set -n "[ClassName methodName]"
(lldb) breakpoint command add 1  # 为断点1添加命令
> po $arg1
> continue
> DONE

# 5. 内存查看
(lldb) memory read 0x12345678
(lldb) memory write 0x12345678 0x42

# 6. 自定义LLDB命令
(lldb) command regex rlook 's/(.+)/image lookup -rn %1/'
(lldb) rlook methodName

# 7. Swift特定命令
(lldb) frame variable -L  # 显示局部变量
(lldb) type lookup String # 查看类型信息

九、工具矩阵

需求场景 推荐工具 理由
日常开发调试 FLEX + Proxyman 功能全面,无需额外环境
UI/布局问题 Lookin + Reveal 3D视图,实时修改
性能优化 Xcode Instruments + Tracy 官方工具+线上监控
内存泄漏 MLeaksFinder + FBRetainCycleDetector 自动检测+深度分析
网络调试 Proxyman/Charles 功能专业,操作友好
日志管理 CocoaLumberjack + SwiftyBeaver 功能强大+美观输出
自动化 Fastlane + slather 流程自动化+质量监控
底层调试 LLDB + InjectionIII 深度控制+热重载

团队规范建议

# iOS团队调试工具规范

## 必装工具(所有开发者)
1. Proxyman/Charles - 网络调试
2. Lookin - UI调试  
3. InjectionIII - 热重载

## 项目集成(Podfile)
```ruby
target 'MyApp' do
  # 调试工具(仅Debug)
  pod 'FLEX', :configurations => ['Debug']
  pod 'CocoaLumberjack', :configurations => ['Debug']
  pod 'MLeaksFinder', :configurations => ['Debug']
end

总结

核心建议:

  1. 不要过度依赖单一工具 - 不同工具有不同适用场景
  2. 掌握核心原理 - 理解工具背后的工作原理比单纯使用更重要
  3. 建立个人调试工具箱 - 根据习惯组合适合自己的工具集
  4. 关注新工具发展 - iOS开发工具生态在持续进化
  5. 重视自动化 - 将重复调试工作自动化,提高效率

终极目标: 快速定位问题 → 深入分析原因 → 有效解决问题

这些工具大多数都有免费版本或开源版本,建议从最常用的几个开始,逐步建立自己的调试能力体系。

掌握这些工具,不是为了炫耀技术,而是为了让你的代码更健壮,让你的用户更满意,让你自己在深夜加班时少掉几根头发。

❌
❌