2012-05-13 55 views
1

MyApplication的創建使用NSException例如個性化的崩潰報告。該應用程序檢索callStackSymbols數組並將它們添加到文本文件。符號與ATOS

如果您發現的不是得到這樣的行崩潰報告:

libsqlite3.dylib 0x30531ce4 0x30506000 + 179428

我得到這樣一行一個

29 MyApplication 0x00059260 MyApplication + 4704

看起來不但得不到2個地址,我在中間得到「所有MyApplication」。 Atos沒有使用第一個地址。

enter image description here

回答

2

你得到symbolicated的結果,因爲你的應用程序二進制文件中包含調試符號,因此調用callStackSymbols可以解析地址的時候了。唯一缺少的部分是行號,當符號成爲應用程序的一部分時,這是不可能自動獲得的。

三個數值分別是:Address = Base Address + Offset。這意味着第一個地址足以獲得符號。基地址是二進制/框架的起始地址。大多數情況下,當完成符號化時,第一個地址也會更改爲相對於框架地址,而不是絕對地址。應用程序二進制內存區域通常從0x1000開始。這可以在碰撞中查看報告的二進制圖像部分,它可以歸因於新的iOS版本的新存儲空間的功能是0x1000不同。

所以現在只是在第3列使用給定的地址和調用ATOS時添加0x1000的值。

總的來說,我建議使用基於PLCrashReporter一個框架,它會給你一個崩潰報告的所有信息。以標準崩潰報告格式包含所有線程和二進制映像,並且也可在App Store中運行。