2012-01-10 26 views
2

用戶剛向我提交了一個錯誤報告,說我的應用崩潰了。用戶還附加了一個拋出調用堆棧。理解Objective-C拋出的調用堆棧

這似乎造成該問題的部分是:

 3 My App    0x000000010d005483 My App + 17539 

有沒有辦法把這種地址和/或+ 17539的行號在我的代碼?

請記住,我無法重現我的機器上的錯誤,所以我不能在調試模式下構建它。

回答

3

查看蘋果公司的Tech note

...此跟蹤與在調試器中停止執行時看到的內容類似,只是未給出方法或函數名稱(稱爲符號)。相反,您有十六進制地址和可執行代碼 - 您的應用程序或系統框架 - 它們所引用的地址。您需要將這些地址映射到符號。與Mac OS X的崩潰日誌不同,iPhone OS日誌在寫出時不包含符號信息。在分析之前,您必須象徵性地描述iPhone操作系統日誌。

+0

謝謝,我現在正在閱讀,但我注意到它談論iPhone OS崩潰報告,但我的應用程序是臺式機(Mac OS X),對於Mac OS X崩潰報告它有什麼不同? – houbysoft 2012-01-10 01:57:44

+0

我相信還有整個符號化過程,但對不起,我認爲不應該發佈iS特定鏈接。在[符號崩潰日誌](http://fourdman.blogspot.com/2011/05/symbolicating-crash-logs.html)上查看此博客文章 – 2012-01-10 02:07:01

+0

@houbysoft:通常,如果您將崩潰日誌拖放到Xcode的管理器中,並且你在磁盤上有必要的文件以符號化(例如應用程序和它的dSYM),那麼Xcode將爲你提供象徵。 – 2012-01-10 02:07:37

1

我一直在使用GDB做手動符號。如果你做了很多事情,那會非常麻煩,但是典型的崩潰日誌沒有太多符號,我只需要偶爾用一個符號來表示崩潰日誌。

的過程如下:

  1. 把.dSYM文件爲您的應用程序在同一文件夾中的.app *
  2. 打開終端,並cd文件夾從步驟1
  3. 啓動應用起來GDB:
    $ gdb YourApp.app/Contents/MacOS/YourApp
  4. 設置打印ASM-還原函數和打印符號文件選項:
    set print asm-demangle on
    set print symbol-filename on
  5. 使用P/A命令查找每個地址的行號在您的堆棧跟蹤:
    p/a 0x000000010d005483

這些指令來自this page(顯然不再上網)。

*請注意,.dSYM有一個UDID綁定到它創建的特定版本。所以,如果你沒有原始的.dSYM文件,你就麻煩了。從理論上講,你甚至不能從源代碼管理和重建中拉同一個修訂版,因爲這個UDID會有所不同。

+0

剛剛嘗試過,但在輸入'p/a 0x000000010d005483'後,我只得到'$ 1 = 0x10d005483',no行號或其他... – houbysoft 2012-01-10 03:58:58