2011-01-12 224 views
0

我從客戶那裏得到了一個使用我的iPhone應用程序的崩潰日誌,並試圖獲取符號信息,並失敗壯觀...我在網上找到的指令是這樣的(要在Mac上執行) :分析iPhone崩潰日誌

symbolicatecrash碰撞登錄file.crash符號file.dSYM>報告與 - symbols.crash

  • 碰撞登錄file.crash是通過iTunes由用戶獲得的崩潰日誌,一個文本文件
  • symbol-file.dSYM由XCode在每次構建應用程序時創建幷包含符號文件(在一系列o ˚F文件夾)

不幸的是我的嘗試都失敗了: - 一個版本symbolicatecrash我已經(不記得在那裏&當我發現它),輸出與輸入相同的文件,沒有符號 - 我在我的磁盤上找到了另一個版本,我收到此錯誤消息(注意:我試圖指向.dSYM樹中的符號文件本身 - 仍然沒有幫助):

/Developer/Platforms/iPhoneOS.platform /Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash failedstart.crash ScanBizCards.app.dSYM/Contents/Resources/DWARF/ScanBizCards> crashwithsymbols

無法理解otool( - >'\/Developer \/Platforms \ /iPhoneOS.platform \/Developer \/usr \/bin \/otool -arch armv7 -l/Users/patrickq/Projects /icr/OCR/newOCR/build/Debug-iphonesimulator/ScanBizCards.app/ScanBizCards')在/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash行301。

幫助任何人?

我甚至不介意做數學自己的符號,但不知道如何打開符號文件...

帕特里克

+0

我已經將崩潰日誌拖到組織者....我看到一個消息說'象徵XY'....但我看不到結果...你能告訴我在哪裏可以找到它嗎?我覺得盲目... – Icky 2011-02-17 11:10:45

回答

0

看來你運行的是iPhone模擬器調試symbolicatecrash符號,而您需要將路徑傳遞給iPhone設備的符號構建

0

如果使用Xcode的「構建和存檔」功能將應用程序分發到Apple Store或用戶,則可以拖動崩潰日誌給組織者,讓IDE做象徵。

請記住,你需要必須有有應用程序和.DSYM的確切版本。重新編譯應用程序會生成一個不同的.DSYM,它不起作用。

+0

神奇,作品像一個魅力 - 謝謝 – patrickq 2011-01-13 20:01:53

6

symbolicatecrash是非常麻煩,並嘗試做聰明的事情來找到使用聚光燈(mdfind)您的二進制文件/ dsym文件。這條線路是線索:

Can't understand the output from otool 
(-> '\/Developer\/Platforms\/iPhoneOS.platform\/Developer\/usr\/bin\/otool 
-arch armv7 -l 
/.../build/Debug-iphonesimulator/ScanBizCards.app/ScanBizCards') 

顯然,它發現(對於仿真器)的研究與開發建立產品之一,用它來嘗試symbolicate在設備上生成的crashreport。當然,它慘敗了。

我們公司的兩個不同的人出現了完全相同的問題。我還沒有調查問題是如何發生的。我想這是非常罕見的,否則,這樣一個巨大的bug已經被修復了。就目前而言,我只有這個非常粗略的解決方法:

  • 刪除所有build文件夾(你的情況ScanBizCards.app)提此可執行名稱
  • 從模擬器(我的意思是,所有的化身刪除應用程序在模擬器的各種版本的應用程序,就像在~/Library/Application Support/iPhone Simulator/4.3~/Library/Application Support/iPhone Simulator/3.2,...)

這使你只用歸檔應用程序。這一次,symbolicatecrash找不到錯誤的版本並最終找到正確的版本。

如果我重現了這個問題,我會花一些時間來調試這個可怕的perl腳本。

我希望有幫助。

+0

謝謝!刪除模擬器構建目錄並重置模擬器爲我工作的魅力。 – csch 2011-05-10 18:55:29

1

我有同樣的問題由弗雷德裏克指出。爲了更徹底地解決這個問題,搜索sub getSymbolPathFor_dsymUuidsymbolicatecrash腳本,並更改​​以下行:

my $cmd = "mdfind \"com_apple_xcode_dsym_uuids == $myuuid\""; 

mdfind後添加此參數:

-onlyin /path/to/your/app/bundles 

,並使用你在哪裏存儲目錄中已歸檔的捆綁包。這樣,它會始終找到您的應用程序的正確版本。如果你想成爲額外的安全,向下滾動了一下,它說:

my @spotLightSearchForExecutable = `mdfind $executable.app'; # To cover the case where the DSYM's and .app are no located in the same location. 

並添加-onlyin /path/to/your/app/bundles爲好。此路徑僅用於上述行的註釋狀態symbolicatecrash無法在與.DSYM相同的文件夾中找到.app。希望如果你把它們都存放在同一個文件夾中,這個文件應該永遠不會運行,但是如果你有任何疑問,最好是安全並且也要這樣做。