You need to enable JavaScript to run this app.
导航

堆栈解析缺失或不准确

最近更新时间2024.01.08 16:31:15

首次发布时间2021.09.22 20:14:11

PC端崩溃基于breakpad提供的minidump_stackwalk工具解析,也就是APMPlus采用服务端栈回溯。相较于客户端栈回溯,准确性会差一些。
系统库的符号支持较少,目前无法拿到更准确的信息。以下针对业务侧的堆栈,所有类型问题都是以下两个原因:

  • 符号表信息缺失
  • 发生内存踩踏,无法进行回溯

连续堆栈之间没有调用关系

可能是因为栈内存信息被破坏,minidump_stackwalk只能基于现有信息去猜调用关系,可以切换到崩溃详情 > 错误堆栈 > Raw里确认堆栈的回溯方式。
图片
堆栈的4种情况准确性如下:

  • given as instruction pointer in context:准
  • previous frame's frame pointer:准
  • call frame info:这个基本准确,只有内存踩踏不准
  • stack scanning:不准,纯靠猜测

堆栈解析符号无法和文件名和行号信息对应

已知inline符号支持不好。

有解析符号,但是没有文件名和行号信息

勉强符合预期。符号表中,符号信息分为两类:

  • FUNC记录:记录了符号的起始地址和符号大小,可以找到对应的文件名和行号。
  • PUBLIC记录:只记录了起始地址,没有行号数据和符号大小。

当前frame pointer解析后为PUBLIC记录,没有文件名和行号信息,还有一种情况是因为符号表解析方式不对,使用了strip符号的文件导出符号表,导致符号表缺失必要信息。

解析符号明显不对,偏移量超出合理值

大概率是上传的符号表有问题,缺失信息。
如果是Mac,请检查是否基于dSYM文件提取了.sym文件,dSYM文件里符号信息是最全的,macho文件一般都剪裁了符号,缺失了很多信息,请基于dSYM文件重新提取重新上传符号表。