我一直在关注今天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
这恰恰意味着什么?
我应该补充一点,我不是在寻找有关如何进行符号化的信息,thx!
编辑:对我来说同样奇怪的是,如果你比较前后符号版本,那么对于我写的代码:
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
地址和偏移量有变化吗?为什么会这样?
答案 0 :(得分:1)
if you take
0x3002d7da 0x3002b000 + 10202
What does this signify exactly?
在这种情况下,“+”并不意味着添加太多。这条线告诉你的是:
(换句话说,正如你所做的那样,0x3002d7da = 0x3002b000 + 10202。)
您可能关心的重要事项是被调用方法的起始地址。
但是,实际上,你可以忽略所有这些,因为它不像符号化版本那么有用,它为你提供了源文件名和版本。行号。
答案 1 :(得分:1)
扩展Olie对应用程序“符号化版本”的响应:从应用程序的分发版本中删除调试信息以使其更小并保护开发人员的知识产权(因此您无法看到类和方法名)。
为了解密日志,您需要将调试符号文件与创建崩溃日志的特定版本相关联。
此文件(.dSYM扩展名)将出现在iPhone应用程序的二进制文件所在的构建文件夹中。请注意,您需要.dSYM文件用于在手机上编译应用程序的特定编译 - dSYM文件带有时间戳,因此如果您重新编译应用程序,即使您不更改,dSYM文件也会更改代码行。
在计算机上安装此文件后,将崩溃文件拖到xcode中(或从管理器中的附加设备查看日志),这将为您提供所调用方法的堆栈跟踪以及所谓的特定代码行崩溃。