You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用本地构建的Flutter iOS引擎时,如何正确调试引擎Objective-C/C++源码?

使用本地构建的Flutter iOS引擎时,如何正确调试引擎Objective-C/C++源码?

我之前也遇到过一模一样的问题!本地编译完Flutter iOS引擎后,调试时LLDB能找到符号但死活找不到源码,每次手动输source map太折腾,后来摸索出几个靠谱的永久解决方法,给你一步步讲:

方法一:给Xcode项目配置自动执行的LLDB映射(项目级生效)

这个方法只针对当前Flutter项目生效,每次启动调试都会自动加载源码映射:

  1. 打开Xcode,点击顶部菜单栏的Product -> Scheme -> Edit Scheme(或者直接按Cmd + <快捷键)
  2. 在弹出的Scheme编辑窗口中,选择左侧的Run选项卡,切换到Arguments标签页
  3. 找到Debugger Commands区域,点击左下角的+号,添加一行LLDB命令:
    settings set target.source-map /flutter /Users/chenghuanzhong/Desktop/engine/src/flutter
    
    注意把后面的路径替换成你本地引擎源码中flutter目录的实际路径
  4. 关闭窗口,下次启动调试时Xcode会自动执行这个命令,源码路径就会自动映射了

方法二:配置全局LLDB初始化文件(所有项目通用)

如果你经常用本地引擎调试不同项目,全局配置更省心:

  1. 打开终端,检查用户目录下有没有.lldbinit文件:
    ls ~/.lldbinit
    
  2. 如果没有的话,直接创建一个:
    touch ~/.lldbinit
    
  3. 用文本编辑器打开这个文件(比如用open -e ~/.lldbinit在Mac上打开),添加一行:
    settings set target.source-map /flutter /Users/chenghuanzhong/Desktop/engine/src/flutter
    
  4. 保存文件后,重启Xcode,以后不管调试哪个项目,LLDB都会自动加载这个源码映射

方法三:检查本地引擎的构建配置是否正确

有时候调试信息缺失也会导致找不到源码,要确保你构建的是带完整调试信息的引擎版本:

  • 确认构建命令是正确的,比如针对iOS模拟器arm64的调试版本,构建命令应该是:
    ./flutter/tools/gn --ios --unoptimized --simulator --arm64
    ninja -C out/ios_debug_sim_unopt_arm64
    
    这里的--unoptimized是关键,它会生成未优化的、带完整调试符号的引擎二进制,方便调试
  • 另外,Xcode中Generated.xcconfig的配置要确保正确:
    你已经添加的FLUTTER_ENGINELOCAL_ENGINELOCAL_ENGINE_HOST是对的,要保证FLUTTER_ENGINE指向的是引擎源码的根目录(也就是/Users/chenghuanzhong/Desktop/engine/src),而不是子目录

方法四:临时补救——单个文件手动映射(紧急情况用)

如果上面的配置都没生效,或者只是临时调试某个文件,可以手动指定路径:
当LLDB提示找不到文件时,在Xcode的调试导航栏中,右键点击对应的栈帧(比如-[FlutterViewController touchesBegan:withEvent:]),选择Edit Source Path...,然后把默认的/flutter/...路径替换成你本地的实际源码路径,比如把/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm改成/Users/chenghuanzhong/Desktop/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterViewController.mm

额外注意点

  • 如果你移动了本地引擎的源码目录,一定要同步更新source map中的路径,不然又会出现找不到文件的问题
  • 有时候Xcode的缓存会搞鬼,遇到奇怪的问题可以试试清理Derived Data(Xcode -> Settings -> Locations -> 点击Derived Data旁边的箭头,删除对应项目的缓存目录),然后重启Xcode重新构建
  • 确保Xcode用的是LLDB调试器(默认就是),不要切换成GDB,GDB对这种源码映射的支持不如LLDB好

这样配置完之后,你应该就能正常调试FlutterViewController.mm这类引擎源码了,断点、单步调试都能正常工作~

火山引擎 最新活动