【问题标题】:build settings to generate proper dSYM构建设置以生成正确的 dSYM
【发布时间】:2012-12-01 13:36:03
【问题描述】:

我有一个关于 dSYM 的问题。我用我的应用做了一个实验,并在其中添加了以下代码:

if (currentMenuPage_ == MenuPageAttrsVals) {
    return ((ValueAndId *) [currentValues_ objectAtIndex:-1]).name;
}

正如预期的那样,应用程序崩溃并生成了崩溃日志。

但是 Xcode 和 atos 无法告诉我崩溃的确切位置。

2   CoreFoundation                  0x3192c23d -[__NSArrayI objectAtIndex:] + 165
3   MyApp                           0x00053487 0x49000 + 42119
4   MyApp                           0x0005102d 0x49000 + 32813

在构建我的应用程序以生成正确的 dSYM 时,我是否必须设置一些特殊设置?

如果我打电话给dwarfdump --uuid MyApp.app.dSYM,我会得到一个号码。这个数字是否应该出现在我的崩溃日志中?

【问题讨论】:

  • 是不是你的 objectAtIndex 值是-1。顺便说一句,我得了癌症。
  • @R.A 是的,我故意让-1 生成崩溃日志。崩溃日志中显示的部分是崩溃发生的位置。

标签: ios crash


【解决方案1】:

该数字应出现在Binary Images 部分下的第一行。 (它的格式可能不同,例如小写且没有- 字符)。

请记住,每次您进行构建时,此 UUID 都会更改,如果您没有保存之前的 dSYM,它将不会对其进行符号化。

如果您没有更改很多(任何)代码,您可以将 Binary Images 部分中的 UUID 字符串(保留其中的格式)替换为最新 dSYM 中的新字符串。

如果符号化不起作用,并且 UUID 正确,则该文件夹很可能没有被 Spotlight 索引,因此符号化脚本找不到 dSYM。

【讨论】:

  • 好的,我在*/Debug-iphoneos 目录中做了mdimport .,但它没有帮助。另外,如果我调用atos -arch armv7 -o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp 并写入从崩溃日志读取的0x0007bac5 地址作为响应,我会得到:0x0007bac5 (in MyApp) 并且没有关于行号的信息。
  • @MichK 你比较了两者的 UUID 吗?它们是不同的还是相同的?如果mdfind 没有找到 UUID,则要么该目录没有被聚光灯索引 要么 您不再拥有具有该 UUID 的 dSYM(请参阅我在上面的回答中对此的评论) .关于直接使用 atos,您应该在这里查看我的答案:stackoverflow.com/questions/13574933/…
  • 非常感谢!您对如何使用atos 的回答对我帮助最大。我以您提供的链接中描述的方式计算地址并且它有效:)。不幸的是mdfind 找不到指定 uuid 的 dSYM,但如果我可以通过 atos 做到这一点,这不是问题。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2015-05-26
  • 2014-01-28
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2019-04-11
相关资源
最近更新 更多