Atos无法从已归档应用的dSYM获取符号

38

我有来自BugSense的崩溃报告,因此我知道崩溃的内存位置,但它们没有被符号化。而且,BugSense不发送传统的崩溃报告,但仍会提供错误追踪信息。因此,我尝试使用Atos获取我的崩溃的确切位置。我已经在XCode 4中归档了应用程序,并使用该版本提交到应用商店,因此我有一个dSYM文件。我运行了以下代码:

atos -arch armv7 -o MyApp.app.dSYM 0x001057e9

然而,我没有获得正确的输出,而是收到了一个错误:

atos cannot load symbols for the file MyApp.app.dSYM for architecture armv7

有什么建议可以解释为什么会发生这种情况吗?我没有从应用程序中去除调试符号。

2个回答

107
为了正确地从您的已归档应用程序的dSYM文件中获取符号并从BugSense崩溃报告(或其他任何崩溃报告)中获取有用信息,您需要执行以下步骤:
  1. 将BugSense堆栈跟踪复制到TextEdit或任何其他文本编辑器中。确保使用“剪贴板”图标而不是仅复制文本。否则,您将无法获得堆栈跟踪的实际内存位置,这是使用atos查找引用并对堆栈跟踪进行符号化所必需的。
  2. 打开XCode并转到Organizer
  3. 找到您的归档文件并右键单击它,然后转到Finder中打开它。
  4. 导航到归档的目录,通常为~/Library/Developer/XCode/Archives/YYYY-MM-DD/
  5. 进入特定的归档文件,然后进入dSYMs文件夹
  6. 您将看到文件MyApp.app.dSYM,您可能会认为,这是我应该针对其运行atos的文件!这是不正确的。它实际上是另一个包!进入此包中的文件夹:MyApp.app.dSYM/Contents/Resources/DWARF,您会发现另一个文件,简单地称为MyApp。这是实际的dSYM文件。
  7. 运行atos -arch armv7 -o MyApp 0x0000000(或任何内存地址)以查找错误的位置,或者只需运行atos -arch armv7 -o MyApp进入交互模式。

25
哇,第六步在这里帮了很大的忙。谢谢! - ySgPjx
2
“-arch armv7”非常重要,没有它我得到了错误的数据。 - AlexeyVMP
2
我有一个回溯,但没有崩溃日志,这样还有效吗?似乎只是给我随机位置。这是我的回溯中的一个示例行:MyApp 0x00054b23 MyApp + 301859。 - jjxtra
1
这个答案包含了如何计算正确地址的帮助:https://dev59.com/amYr5IYBdhLWcg3wkK-w#13576028 - Kerni
非常感谢,我花了三天以上的时间来尝试使用dSYM,步骤6确实展示了要使用的确切dSYM。非常感谢。 - Hossam Ghareeb
显示剩余2条评论

4

你必须获取正确的地址。你可以使用上面的解决方案,但你必须使用十六进制数学来获取正确的内存地址:滑动偏移量+栈地址-加载地址。


1
此答案展示了如何获取所提到的值:https://dev59.com/amYr5IYBdhLWcg3wkK-w#13576028 - Kerni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接