5

我的 XCode 3.2.5 构建的应用程序的 iTunesConnect 崩溃日志显示方法名称,但不显示行号。例如,在我粘贴在下面的简短崩溃报告中,它显示了这一点:

0x000f5ef8 -[MyTableViewController dealloc] + 120

这里有两件事让我感到困惑,我希望能对此有所了解。首先是为什么来自 iTunesConnect 的原始 .crash 文件已经部分符号化:它显示了类和方法名称,但没有显示源代码文件和行号。我希望原始的 iTunesConnect 崩溃日志只显示十六进制地址。据我了解,只有在我将崩溃日志下载到本地系统并使用适当的工具(XCode Organizer、symbolicatecrash、atos、gdb x/i 命令等)和确切的应用程序二进制文件和 dSYM 文件(那些具有匹配 UUID 的),我会看到类、方法、源代码文件和行号的完整符号。即使我在 Windows 框中下载并查看崩溃日志,它也显示为部分符号。我担心我的分发二进制文件必须包含一些调试符号才能使此信息显示在原始崩溃日志中,尽管在其分发目标设置中设置了“条带链接项目”。这里的任何见解都会很棒。

第二件事让我感到困惑,也是我在修复这次备受瞩目的崩溃时更直接关心的事情,是抵消业务。我已经非常小心地找到了具有匹配 UUID 的 dSYM 和应用程序二进制文件,将它们放在我的主目录中,以便 Spotlight 等人可以找到它们,无论我做什么,我都无法将该偏移量转换[MyTableViewController dealloc] + 120为源代码文件(我知道它是 MyTableViewController.m)和行号。我用原始的 iTunesConnect .crash 文件尝试了以下技巧:

  • XCode Organizer:它的“符号化”不会影响崩溃日志的变化——它是一样的。
  • symbolicatecrash:在详细模式下它并没有真正抱怨任何事情,并且输出的crashlog是一样的
  • gdb:使用与 XCode 3.2.5 相同的 gdb 和 -arch 设置来生成分发版本,并根据这篇文章加载匹配的应用程序二进制和 dSYM 符号,gdb 'x/i' 和 'info line *' 命令告诉我[MyTableViewController dealloc] + 120对应于我们代码库中完全不相关的一段完全不同的文件——甚至是一个 .h 文件!大雁追逐。

这有些不对劲。即使确保崩溃报告、应用程序二进制文件和 dSYM 文件中的 UUID 完全相同......这些工具都不能产生实际的行号,并且以低级方式进行操作让我大吃一惊。知道确切的行号对于解决此问题至关重要,因为我们无法在内部重现此崩溃,所以我们在这里盲目飞行。这看起来是一个简单的过度释放对象,但不清楚它到底是哪个对象,我们也无法从上下文中分辨出来。我想知道是否有一些盗用的 XCode 构建设置以某种方式破坏了符号化过程。

谢谢你的时间!

以下是来自 iTunesConnect 的删节的原始 .crash 日志。

Incident Identifier: 09EAE058-7D55-4AE5-947A-17280FB0211A
Hardware Model:      iPhone3,1
Process:         MyApp [1895]
Path:            /var/mobile/Applications/B4B872EF-CB0D-41D7-A7B5-435ADE479D0A/MyApp.app/MyApp
Identifier:      MyApp
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2011-01-24 14:06:32.941 -0500
OS Version:      iPhone OS 4.2.1 (8C148)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xd0000000
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x33479466 objc_msgSend + 18
1   MyApp                       0x000f5ef8 -[MyTableViewController dealloc] + 120
2   CoreFoundation                  0x33a26f74 -[NSObject(NSObject) release]
3   libobjc.A.dylib                 0x3347a812 objc_setProperty
4   UIKit                           0x320bb4a0 -[UINavigationController setDisappearingViewController:]
5   UIKit                           0x320bb478 -[UINavigationController _clearLastOperation]
xx SNIP xx
23  MyApp                       0x00014eac main + 36
24  MyApp                       0x0000b324 start + 44

XX SNIP xx

Binary Images:
    0x1000 -   0x1e3fff +MyApp armv7  <5570f8eee3bc11647732c12f96fe9553> /var/mobile/Applications/B4B872EF-CB0D-41D7-A7B5-435ADE479D0A/MyApp.app/MyApp
4

1 回答 1

0

我在释放未保留的对象或位于自动释放池中的对象时遇到了类似的问题,从而被释放了两次。通常情况下,我会在框架/iOS 内部的某个位置崩溃,但这是由于我缺乏适当的内存管理造成的。我并不是说这里正在发生这种情况,而只是我在出现类似错误时所经历的。

于 2011-03-27T14:30:59.330 回答