Xcode调试非本机构建的程序——符号文件和源码断点

2,629 阅读1分钟

问题场景

  1. 用户在机器1上用XcodeApp工程(存放于本机文件路径1)布署到iPhone上,然后在机器2上用Xcode打开文件路径2的工程,然后AttachiPhone上的App进程,这时Xcode因为找不到文件路径1所以无法显示源代码,这时Xcode只能展示汇编代码

  2. 使用Xcode调试App时,如果有些组件是二进制组件且不是本地构建的,即便本机下载了组件源码,调试时Xcode也不能自动展示相关源码

解决方案

  1. 机器1上编译App时生成的.dSYM文件拷到机器2上(如:/Users/jz/Downloads/testApp.dSYM),然后在lldb中增加符号文件路径:
/* 增加符号文件路径 */
(lldb) target symbols add /Users/jz/Downloads/testApp.dSYM
  1. lldb中设置机器1上的文件路径1机器2上的文件路径2的映射关系:
/* 设置源机器与当前机器上源文件路径的映射关系 */
(lldb) settings set target.source-map "机器1上的文件路径1" "机器2上的文件路径2"

/* 添加映射关系 */
(lldb) settings append target.source-map "机器1上的文件路径1" "机器2上的文件路径2"

/* 显示已配置的映射关系 */
(lldb) settings show target.source-map 

  • 机器1上的文件路径1机器2上的文件路径2对应源码的最上层目录,不需要逐级设置子目录路径映射
  • 机器1上的文件路径1机器2上的文件路径2应该包含相同版本的源文件,否则调试时会显示异常

最后,欢迎大家关注我的微信公众号,有空多多交流