iPhone崩溃日志中的内存地址意味着什么?
我今天一直在看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
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
但是,实际上,您可以忽略所有这些,因为它没有符号化版本有用,符号化版本提供源文件名和行号。扩展Olie对“符号化版本”的响应应用程序:调试信息从应用程序的分发版本中剥离,以使其更小,并保护开发人员的知识产权(因此您无法看到类和方法名称) 为了解密日志,您需要将调试符号文件与创建崩溃日志的特定生成关联 此文件(.dSYM扩展名)将出现在构建文件夹中,iPhone应用程序的二进制文件也位于该文件夹中。请注意,您需要使用.dSYM文件进行特定编译,该编译用于在手机上编译应用程序-dSYM文件带有时间戳,因此,如果您重新编译应用程序,即使您不更改代码行,dSYM文件也会更改
一旦您的计算机上有了此文件,请将崩溃文件拖到xcode中(或查看Organizer中连接设备的日志),这将为您提供所调用方法的堆栈跟踪以及导致崩溃的特定代码行。Jin,关于如何符号化的精彩描述真是太好了,虽然这不是我的问题;如果“堆栈跟踪中的代码行”,你的意思是“函数开始的点”,那么这就是我猜测的意思。但为什么内存地址会改变前/后符号?(请参见我对问题的编辑)