2010-02-24 55 views
3

我正在嘗試使用symbolicatecrash,並獲得有趣的結果。一位同事在另一臺機器上構建了我們的發行版本,所以他給我發送了dSYM文件。運行在symbolicatecrash不喜歡我的dSYM文件

發現

/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash

它填補了所有的蘋果功能,但不是symbolicatecrash文件後礦。問題似乎是它不能(或不會)找到dSYM文件,可能是因爲它有我同事的機器信息。當我從崩潰報告複製十六進制地址,我可以使用dwarfdump這樣的:

dwarfdump --lookup 0x0001f892 --arch ARMv6的路徑/到/ MyApp.app.dSYM

它給我的行號那個單一的電話正確。另外,symbolicatecrash能夠從我們的代碼中計算遊戲的行數,但不能算Apple。我不知道他爲什麼看不到Apple的東西,但所有這些讓我相信問題在於如前所述找到dSYM。

所以。有沒有什麼辦法可以將dSYM的路徑傳遞給symbolicatecrash命令,或者使其工作的一些其他方式?因爲,嚴肅地說,製作一個爲你的文件做某種魔術「搜索」的工具是完全愚蠢的,只是爲了找不到它,因爲它不想。

此外,任何想法爲什麼我的同事的構建不會顯示任何蘋果的功能? 雖然我在這裏,但在崩潰文件中「+」是什麼意思?就像這樣:

0x00059f8c - [一個UIWindow的SendEvent:] + 108

回答

6

symbolicatecrash是一個巨大的黑客,你能做的最好是學會做事,正是因爲它從你的期望。或者閱讀它的內部和修復它,但然後你將不得不重新修復它的下一個SDK更新...

在這種情況下,我認爲你的問題是,你沒有把dSYM文件放在相同的文件夾作爲應用程序包。它必須與XCode完全一樣,並且應該放在聚光燈可以找到它的位置。此外,請確保名稱與預期完全一致 - 「dSYM」的確切格式非常重要,並且我聽說應用程序名稱中沒有支持點的錯誤。

如果有疑問總是嘗試使用-v選項以獲取更詳細的錯誤消息。

對於Apple二進制文件沒有行號信息,我個人非常樂意至少獲得函數名稱。可能會更糟。

在「 - [UIWindow sendEvent:] + 108」表示從函數的開頭起的108個字節。對這個數據唯一有用的解釋是,如果數字很小,那麼它可能是準確的,如果數字很大,那麼你的符號化就會失去作用。

+0

很好的答案。我只想指出,Apple可能故意不在其二進制文件中包含這類信息(文件名和行號),原因是:他們不想泄露任何關於其源代碼的額外信息。即使我們(開發人員)有這些信息,我們將如何處理它?這不像我們可以調試Apple的代碼,所以知道文件名和行號是無用的。 – Roberto 2012-01-28 22:11:00