首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MetricKit MXCallStackTree符号

MetricKit MXCallStackTree符号
EN

Stack Overflow用户
提问于 2021-06-08 20:24:31
回答 2查看 108关注 0票数 1

我正在尝试实现MetricKit,这样以后我就可以分析MXCrashDiagnostic和MXHangDiagnostic报告。但是,当我触发测试崩溃时,下面是我从MXCrashDiagnostic获得的一个示例:

代码语言:javascript
复制
ente  "timeStampEnd": "2021-06-07 15:59:00 +0000",
"crashDiagnostics": [
  {
    "version": "1.0.0",
    "callStackTree": {
      "callStacks": [
        {
          "threadAttributed": true,
          "callStackRootFrames": [
            {
              "binaryUUID": "DC2EACEA-3D9C-3409-96C2-2DF9C89AD19D",
              "offsetIntoBinaryTextSegment": 6917586944,
              "sampleCount": 1,
              "subFrames": [
                {
                  "binaryUUID": "DC2EACEA-3D9C-3409-96C2-2DF9C89AD19D",
                  "offsetIntoBinaryTextSegment": 6917586944,
                  "sampleCount": 1,
                  "subFrames": [
                    {
                      "binaryUUID": "DC2EACEA-3D9C-3409-96C2-2DF9C89AD19D",
                      "offsetIntoBinaryTextSegment": 6917586944,
                      "sampleCount": 1,
                      "subFrames": [
                        {
                          "binaryUUID": "35463E49-9534-3644-B993-2A73C287A143",
                          "offsetIntoBinaryTextSegment": 4329963520,
                          "sampleCount": 1,
                          "binaryName": "demo",
                          "address": 4333717704
                          }]

我试图通过执行命令来符号化数据:

/Users/xxx/Downloads/!dsym-4/demo.app.dSYM/Contents/Resources/DWARF/demo -arch arm64e -o atos 4333717704

但是我找不到崩溃堆栈,返回的结果是4333717704

DSYM文件uuid为UUID: 35463E49-9534-3644-B993-2A73C287A143 (arm64) /Users/xxx/Downloads/!dsym-3/demo.app.dSYM/Contents/Resources/DWARF/demo

MetrickIt返回的堆栈应该如何符号化?谁能告诉我非常感谢

EN

回答 2

Stack Overflow用户

发布于 2021-08-30 09:28:51

  1. 使用offsetIntoBinaryTextSegment字段而不是addressMXCallStackTree解释每个字段的含义。它告诉我们offsetIntoBinaryTextSegment是symbol的地址。address是memory.
  2. Convert 10进制到十六进制中堆栈帧的地址。atos只接受十六进制,address.
  3. atos --help会告诉你需要两个地址参数。-l之后的loadAddress是您的二进制映像加载地址。address是符号偏移量(offsetIntoBinaryTextSegment)+ loadAddress。参见crash report symbolication。在MXCallStackTree中,我们不知道像崩溃报告这样的二进制镜像加载地址。但这并不是必须的。atos只关心address - loadAddress == offsetIntoBinaryTextSegment。在您的情况下,一个诀窍是loadAddress=0x1address=hex(offsetIntoBinaryTextSegment + 1)。因此,命令行应该是0x102160000 = hex(4329963520)

代码语言:javascript
复制
atos -arch arm64e -o /Users/xxx/Downloads/!dsym-4/demo.app.dSYM/Contents/Resources/DWARF/demo 0x1 0x102160001

下面的讨论可能也会对您有所帮助:https://developer.apple.com/forums/thread/681967

票数 1
EN

Stack Overflow用户

发布于 2021-12-06 11:00:02

好的,所以我一点也不惊讶你会有问题。我认为每个试图符号化MetricKit数据的人都会遇到问题。

原因是offsetIntoBinaryTextSegment字段的名称不正确。它实际上是二进制加载地址!我花了很长时间才弄明白这个问题。我已经向苹果提交了一个bug,我建议你也这样做。(尽管我对此不抱太大希望,因为这个JSON结构实际上是一个API)

您想要做的是:

代码语言:javascript
复制
atos -arch ARCH -i -l <offsetIntoBinaryTextSegment> /path/to/dsym <address>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67886881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档