You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
使用指南
Coredump
复制全文
下载 pdf
Coredump
Coredump是一种调试技巧,可以将崩溃时内存信息dump下来,之后可以通过LLDB进行线下调试。​
常规的稳定性监控工具,只会捕获堆栈、寄存器、内存等等信息,能够解决大部分问题,但会丢失大部分现场信息,而Coredump可以将程序的所有信息dump下来,提供海量数据进行问题排查。​
理论上,可以解决所有的Singal和Mach异常。​
前提条件​
  • 配置coredump采样率可以控制只对线上部分用户开启功能,默认采样率为0。​
  • ​
步骤一:新建工作空间​
假定文件夹路径为~/Desktop/CoredumpCase。​
步骤二:下载物料​
由于coredump的使用需要借助本地LLDB,因此需要将相关物料下载到本地,从而构建LLDB所需的环境。​
下图为LLDB所需要的所有资料。下边会逐个介绍它们的获取方法。​
​图片​​
.app程序与符号表​
以下是按照Products产物的方式进行演示的,如果您使用的是Archive或使用打包机,请根据您的情况自行获取。​
  1. 在工程中,找到Products,右键单击产物 > Show in Finder。​
  • ​图片​​
  1. 将.app程序和符号表这两个文件拷贝到工作空间。​
  • ​图片​​
注意​
  • 请不要修改.app程序和符号表的名称。​
  • 请确保.app程序和符号表是匹配的。​
  • .app程序UUID获取方法:dwarfdump --uuid ${appFilePath}/${appName}。​
  • 因此,获取APMInsight_iOS app的UUID方法为:​
  • ​图片​​
  • 符号表UUID获取方法:dwarfdump --uuid ${appFilePath}。​
  • 因此,获取APMInsight_iOS符号表的UUID方法为:​
  • ​图片​​
  • ​
Crash文件​
  1. 在崩溃详情页,下载崩溃日志。​
  • ​图片​​
  1. 执行以下命令, 对崩溃文件做二次处理。​
  • ​
    cat ${crash_path} | jq -r '.data' | awk '{gsub(/\\n/,"\n")}1' > ${output_crash_path}/crash.txt​
    ​
  • 假设从平台上下载后的文件路径为 ~/Downloads/20230228210309.txt 。那么二次处理Crash文件的方法为:​
  • ​
    cat ~/Downloads/20230228210309.txt | jq -r '.data' | awk '{gsub(/\\n/,"\n")}1' > ~/Desktop/CoredumpCase/crash.txt​
    ​
注意​
  • 请保证二次处理后的文件名为crash.txt。​
  • 需要安装homebrew包管理工具,详情请参见homebrew官网。​
  • 需要配置jq命令:brew install jq。​
Coredump文件​
  1. 在崩溃详情页 > 文件下载,找到Coredump文件。​
  • ​图片​​
  1. 将下载后的Coredump文件解压缩并命名为memorydump。​
  1. 将Coredump文件拷贝到工作空间。​
注意​
  • 请确保文件名为memorydump。​
  • Coredump默认是不开启的,如需采集Coredump文件,请根据需要修改采样率。​
如何确定哪个文件是我们所需的?​
打开生成的crash.txt文件,找到Incident Identifier字段对应的值。​
​图片​​
在文件下载中,找到cd-${Incident Identifier's value}.zip,即为所需要的Coredump文件。​
系统符号表​
获取系统符号表的方式有很多,这里介绍一下如何从Xcode获取系统符号表。​
当通过Xcode真机调试时,Xcode会从手机中下载系统符号表。存在路径为:~/Library/Developer/Xcode/iOS\ DeviceSupport,打开后为:​
​图片​​
注意​
如果在本地找不到对应符号表,您可通过ipsw获取对应版本的系统符号表。​
如何确定哪个文件是我们所需要的?​
打开刚才生成的crash.txt文件,找到Code Type和OS Version字段对应的值。​
​图片​​
  • 如果Code Type为arm64,则${OS Version}为系统符号表。​
  • 如果Code Type为arm64e,则${OS Version}${Code Type}为系统符号表。​
  • 以上,请忽略${OS Version}的iOS字段。​
  • 综上,打开15.5 (19F77),将Symbols拷贝到工作空间。​
  • ​图片​​
注意​
  • 请确保只拷贝对应系统符号表下的Symbols文件夹。​
  • 请不要修改Symbols中的结构,防止Coredump解析失败。​
Coredump脚本​
请根据Python版本,下载对应的Coredump脚本。加载后,请移动到工作空间。​
查看Python的方法:Python3 --version。​
​
Python版本​
Coredump脚本​
3.9.6​
​
​
spliceMemory.so
​
​
​
产物列表​
完成以上操作后,工作空间如下图所示。​
​图片​​
步骤三:消费数据​
通过LLDB运行Coredump​
完成上述操作后,您可以执行以下步骤,开启lldb调试。​
  1. cd到工作空间。​
  1. 启动LLDB。​
  1. 在LLDB状态下,加载Coredump脚本。​
  • ​图片​​
注意​
当执行command script import spliceMemory,spliceMemory不要带.so。​
调试技巧​
开启Coredump后,可以使用LLDB指令来进行操作。​
注意​
调试技巧和在Xcode中执行命令一致。​
调解演示图:​
​图片​​
​
最近更新时间:2026.02.10 19:56:23
这个页面对您有帮助吗?
有用
有用
无用
无用