我有一個關於Xcode和GDB調試的簡單問題。如何查看Xcode調試器中的對象?
我經常碰到一個錯誤:
unrecognized selector sent to instance 0x1081ad0
這使得程序加載到GDB。有沒有一種簡單的方法來檢查GDB內存中的實例?
我有一個關於Xcode和GDB調試的簡單問題。如何查看Xcode調試器中的對象?
我經常碰到一個錯誤:
unrecognized selector sent to instance 0x1081ad0
這使得程序加載到GDB。有沒有一種簡單的方法來檢查GDB內存中的實例?
po 0x1081ad0
po =打印對象。 你甚至可以調用的方法,如
po [myArray objectAtIndex:0]
請注意,它只能在對象,所以
po 1
將你的程序崩潰。
有幾件事你可以做。
或者,你可以看到什麼在那個位置MEM對象是:
信息符號0x1081ad0或
信息行* 0x1081ad0
有更多信息在cocoadev wiki entry for exceptionhandling和debugging tips for objective C at cocoawithlove。
史蒂芬是正確的 - gdb命令po
是print-object
一個快捷方式,它實際上作爲一個參數提供的對象上調用-debugDescription
(不-description
,正如你所期望的那樣)。在很多情況下,您會看到兩種方法的結果相同,因爲除非被覆蓋,否則會調用另一個方法。 (請參閱相關的注:有關詳情,this Apple technote標註注意他們的代碼樣本中,po $r3
打印一個PowerPC寄存器的內容,但你可以使用任何對象的指針/引用,其中包括英特爾寄存器等)
另請注意,print-object
只適用於尚未解除分配的有效對象。如果你發送消息給一個帶指針的指針,它將毫無幫助。但是,鑑於你引用的錯誤,它似乎是一個有效的對象實例,它只是沒有實現你試圖調用的方法。
對象已被破壞也是遠程可能的。在這種情況下,This answer應該有所幫助。
編輯:
還有其他的方法來 「檢查」 中的調試器對象。我詢問this SO question關於Xcode數據格式化程序,這是您可以確定自定義類如何顯示在調試程序的摘要列中的一種方法。從這個問題鏈接的文檔解釋了它的工作原理。我發現總結方法可以幫助我們瞭解對象的狀態。
您的實例無效。你已經釋放了其他地方的對象,但你沒有清除你的指針......啓用殭屍檢測。
「po 1」不會讓您的程序崩潰 - gdb比這更聰明。它只會打印一條錯誤消息。 – 2009-06-11 03:53:08