iPhone崩溃日志中的内存地址意味着什么?

iPhone崩溃日志中的内存地址意味着什么?,iphone,xcode,Iphone,Xcode,我今天一直在看iphone应用程序生成的崩溃日志: Thread 0 Crashed: 0 libobjc.A.dylib 0x3002d7da 0x3002b000 + 10202 1 UIKit 0x31ec4abc 0x31e4d000 + 490172 2 UIKit 0x31ebd214 0x31e4d000 + 459284 3 UI

我今天一直在看iphone应用程序生成的崩溃日志:

Thread 0 Crashed:
0   libobjc.A.dylib                 0x3002d7da 0x3002b000 + 10202
1   UIKit                           0x31ec4abc 0x31e4d000 + 490172
2   UIKit                           0x31ebd214 0x31e4d000 + 459284
3   UIKit                           0x31ebcfac 0x31e4d000 + 458668
谁能告诉我十六进制地址是什么意思吗?(当然是内存地址)

我知道如何象征性地制作:

0   libobjc.A.dylib                 0x000027da objc_msgSend + 18
1   UIKit                           0x00077abc -[UINavigationController _startDeferredTransitionIfNeeded] + 176
2   UIKit                           0x00070214 -[UINavigationController pushViewController:transition:forceImmediate:] + 600
3   UIKit                           0x0006ffac -[UINavigationController pushViewController:animated:] + 28
从那里调试崩溃,但我很好奇;如果你

0x3002d7da 0x3002b000 + 10202
然后:0x3002d7da=0x3002b000+(十进制)10202

这到底意味着什么

我应该补充一点,我不是在寻找关于如何象征的信息,谢谢

编辑:我还感到奇怪的是,如果比较符号化前后的版本,那么对于我编写的代码:

9   memleaktest                     0x00002ffe 0x1000 + 8190
becomes
9   memleaktest                     0x00002ffe -[memleaktestViewController buttonOne] (memleaktestViewController.m:24)
有道理,但对于框架代码:

8   CoreFoundation                  0x307fe52c 0x307f8000 + 25900
becomes
8   CoreFoundation                  0x0000652c -[NSObject(NSObject) release] + 24
地址和偏移量已更改?为什么会这样

if you take
   0x3002d7da 0x3002b000 + 10202
What does this signify exactly?
在本例中,“+”并不表示太多的加法。这句话告诉你的是:

  • 有问题的例程/库从地址0x3002b000开始
  • 堆栈跟踪中的代码行包含10202个字节
  • 这两个数字之和=0x3002d7da
(换句话说,正如您所做的那样,0x3002d7da=0x3002b000+10202。)

您可能关心的重要问题是被调用方法的起始地址


但是,实际上,您可以忽略所有这些,因为它没有符号化版本有用,符号化版本提供源文件名和行号。

扩展Olie对“符号化版本”的响应应用程序:调试信息从应用程序的分发版本中剥离,以使其更小,并保护开发人员的知识产权(因此您无法看到类和方法名称)

为了解密日志,您需要将调试符号文件与创建崩溃日志的特定生成关联

此文件(.dSYM扩展名)将出现在构建文件夹中,iPhone应用程序的二进制文件也位于该文件夹中。请注意,您需要使用.dSYM文件进行特定编译,该编译用于在手机上编译应用程序-dSYM文件带有时间戳,因此,如果您重新编译应用程序,即使您不更改代码行,dSYM文件也会更改


一旦您的计算机上有了此文件,请将崩溃文件拖到xcode中(或查看Organizer中连接设备的日志),这将为您提供所调用方法的堆栈跟踪以及导致崩溃的特定代码行。

Jin,关于如何符号化的精彩描述真是太好了,虽然这不是我的问题;如果“堆栈跟踪中的代码行”,你的意思是“函数开始的点”,那么这就是我猜测的意思。但为什么内存地址会改变前/后符号?(请参见我对问题的编辑)