2011-07-11 25 views
4

我有一個應用程序的ad-hoc版本的.crash日誌,symbolicatecrash拒絕符號。在蘋果破解了XCode 3.2.6中的腳本之後,我已經在symbolicate中使用了applied the .patch to remove the 'die' command。 Symbolicatecrash已經爲其他崩潰日誌工作,但拒絕象徵這一個。我的特設應用程序已構建並存儲在「存檔應用程序」中,因此XCode無法找到它的原因沒有任何理由。我甚至將.app和.dSYM文件複製到了.crash日誌旁邊,而不是骰子。強制symbolicscracked使用特定的.app和.dSYM文件?

有沒有一種方法可以強制symobolicatecrash使用特定的.app和.dsym文件,即使它不認爲它適用?

回答

5

OK原來這個答案現在是需要什麼最新的XCode 5.1.1:

最近,我有從臨時建立一個崩潰日誌。 XCode拒絕Symbolicate。我有一個幾個小時前的存檔版本,我想用我的存檔版本強制使用符號。這是我是如何做到的:

1)首先,我打開一個終端窗口,並進入包含我的檔案的目錄。我運行了這個命令:

xcrun dwarfdump --uuid Example.app/Example | tr '[:upper:]' '[:lower:]' | tr -d '-' 

這就拉出了歸檔版本的dsym_uuid。 tr命令將guid從一個大寫的guid轉換爲一個沒有破折號的小寫guid

2)我進入.crash文件並將與崩潰日誌中的二進制文件關聯的guid更改爲與xcdarchive我的機器上

例如,來自

0x80000 - 0x49efff +MyApp armv7 <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa> /var/mobile/Applications/DC23BDC0-75E3-4DCA-8AC3-099889CE22E0/MyApp.app/MyApp 

0x80000 - 0x49efff +MyApp armv7 <bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb> /var/mobile/Applications/DC23BDC0-75E3-4DCA-8AC3-099889CE22E0/MyApp.app/MyApp 

3)從終端,設置我DEVELOPER_DIR環境VAR到:

export DEVELOPER_DIR=/Applications/XCode.app/Contents/Developer 

4)最後,我跑這獸的命令:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash -v MyApp.crash /Users/me/Library/Developer/Xcode/Archives/2013-05-31/MyApp\ 5-31-13\ 7.00\ PM.xcarchive/Products/Applications/MyApp.app 

注意,路徑symbolicatecrash XCode中的較新版本的變化,:

/Applications/Xcode6.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash 

此命令使用您擁有的.crash文件對您的壓縮文件運行symbolicatecrash

+2

Xcode 5截至今日:我找不到symboliccrash二進制文件。我在這裏找到它:'/ Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash' thanks to http://stackoverflow.com/a/8648232/129202 – Jonny

+0

更新了您評論的路徑。 – esilver

10

原來我意外刪除了與崩潰日誌相關聯的版本。 symbolicatecrash使用以下邏輯來確定是否有與碰撞日誌關聯的符號:

每個崩潰日誌的底部都是二進制映像的列表。你的名列第一。有一個與你的二進制圖像相關的guid。例如:

0x1000 - 0x2befff +MyApp armv7 <a95274a309d73458a40cb5a6fd317a1c> /var/mobile/Applications/91884634-DA1A-4BDB-9E1E-6F487D8F25D7/MyApp.app/MyApp 

相關的GUID是:a95274a309d73458a40cb5a6fd317a1c

它旁邊使用工具mdfind,它看起來在使用文件在文件系統相關的元數據,該GUID的大寫字母,連字符的形式。

從您的存檔應用程序中,如果您單擊MyApp.app.dSYM,然後獲取信息,然後披露更多信息,您將看到dSYM UUID和兩個GUID列出。第二個GUID是相關的。這將是下面的形式:

A95274A3-09D7-3458-A40C-B5A6FD317A1C

enter image description here

規定,第二GUID匹配的.crash文件的GUID,可symbolicate崩潰就能找到和象徵性的。如果它們不匹配,那就是錯誤的二進制。

乾杯, 埃裏克

+0

我沒有看到任何的UUID連接到我的dSYM包在xcode 4中創建。這仍然是蘋果如何做的事情? – pzearfoss

+0

我的dSYM文件只在UDID上列出(與崩潰日誌中的UUID相匹配)。第一個dSYM UUID假設是什麼? – Erik

+1

對於通用(armv6和armv7)應用程序,第一個UUID用於armv6二進制,第二個用於armv7。 –

2

一點點額外的信息,其中可能有幫助。

我有兩個列出的UUID,我的第一個匹配崩潰日誌中的第一個,而不是第二個。然而,我的崩潰來自運行ARM6的設備,而OP則來自運行ARM7的一個設備,而OP則來自運行ARM7的一個設備,而我的推測是每個UUID都與一個體繫結構相匹配,如果您爲ARM6和ARM7構建並且崩潰來自運行ARM6的設備,則你需要匹配第一個UUID,如果它運行的是ARM7,則需要第二個UUID。

如果你只有一個UUID,我認爲你可能只建立一個架構。

這主要是扣除,但似乎很可能。

相關問題