前言

为何调试 Flutter Engine ?

  1. 学习
  2. 查 crash

准备工作

1. Flutter 版本

Flutter 3.7.12 • Engine 1a65d409c7

不一定是这个版本,但是你要记住你自己选择的版本,并找到对应的 dsym。

2. 下载官方 iOS dSYM


# 下载 (115 MB)
curl -L -o Flutter.dSYM.zip \
  "https://storage.googleapis.com/flutter_infra_release/flutter/1a65d409c7a1438a34d21b60bf30a6fd5db59314/ios-release/Flutter.dSYM.zip"

# 解压
unzip -o -q Flutter.dSYM.zip

3. UUID 验证

dSYM UUID:

x86_64 (Simulator): 4C4C4472-5555-3144-A169-E9E012AAE73B
arm64  (Device):    4C4C4415-5555-3144-A112-3C0FFF4C00D2

Engine Binary UUID:

模拟器 (ios-arm64_x86_64-simulator):

x86_64: 4C4C4472-5555-3144-A169-E9E012AAE73B ✅

真机 (ios-arm64):

arm64:  4C4C4415-5555-3144-A112-3C0FFF4C00D2 ✅

完美匹配!模拟器和真机都能用!

这一步搞定后,后面的就很 easy 了。

步骤 1: 创建测试项目

cd ~/projs/analyse_flutter_source
flutter create ios_debug_demo --platforms=ios
cd ios_debug_demo

步骤 2: 配置 LLDB Source Mapping

编辑 ~/.lldbinit(一次性配置):

# Flutter Engine 源码映射
settings set target.source-map /Users/runner/work/engine/src /Users/mac/flutter-engine/src

步骤 3: 在 Xcode 中打开项目

cd ~/projs/analyse_flutter_source/ios_debug_demo
flutter build ios --release --simulator
open ios/Runner.xcworkspace

步骤 4: 配置 Xcode

  1. 选择模拟器目标:Product → Destination → iPhone 15 Pro (或任意模拟器)
  2. 配置 Scheme:

    • Product → Scheme → Edit Scheme...
    • Run → Info → Build Configuration: Release
    • Run → Options → ✅ Debug executable

步骤 5: 添加 dSYM

方法 1: 拖拽到 Xcode

直接把 ~/projs/analyse_flutter_source/Flutter.dSYM 拖到 Xcode 的 Project Navigator

方法 2: 命令行复制

# 复制到项目构建目录
cp -R ~/projs/analyse_flutter_source/Flutter.dSYM \
   ~/Library/Developer/Xcode/DerivedData/Runner-*/Build/Products/Release-iphonesimulator/

步骤 6: 设置断点

符号断点(iOS 工程师的最爱):

  1. Debug → Breakpoints → Create Symbolic Breakpoint
  2. Symbol: -[FlutterViewController viewDidLoad]
  3. Module: Flutter (可选,但推荐)

最后看一下效果:

效果图