2010-10-03 107 views
2

我一直在看今天的iPhone应用程序生成的崩溃日志: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 

谁能告诉我什么是十六进制的地址是什么意思? (内存地址,肯定..)

我知道如何symbolicate产生:

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!

编辑:什么也奇怪,我是说,如果你比较前,后symbolicated版本,然后代码,我写道:

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 

地址和偏移量已更改?为什么会这样?

回答

1
if you take 
    0x3002d7da 0x3002b000 + 10202 
What does this signify exactly? 

在这种情况下,“+”并不意味着加法如此之多。这行告诉你的是:

  • 有问题的程序/库开始于地址0x3002b000
  • 你行的代码的堆栈跟踪发生的10202个字节到它。
  • 这两个数字的总和= 0x3002d7da

(换句话说,像你一样,0x3002d7da = 0x3002b000 + 10202.)

约,你可能不在乎,重要的是开始地址该方法被调用。

但是,真的,你可以忽略这一切,因为它几乎没有为symbolicated版本,它给你的源文件名&行号一样有用。

+0

如果通过“堆栈跟踪中的代码行”,你的意思是“指向哪个函数开始”,那么我猜它可能意味着什么。但是为什么内存地址会改变前/后符号? (看我的编辑到我的问题) – Brynjar 2010-10-04 11:50:50

1

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

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

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

一旦在计算机上有该文件,将该崩溃文件拖入xcode(或从组织者中的连接设备查看日志),这将为您提供所调用方法的堆栈跟踪以及所调用的特定代码行导致事故发生。

+0

金,对如何象征的一个很好的描述的荣誉,虽然这实际上不是我的问题;对不起,如果这不明确.. – Brynjar 2010-10-04 10:09:36

相关问题