2014-05-19 27 views
2

當連接到經由Xcode的調試器,LLDB提供局部變量的有用視圖(截圖的左下方):動態訪問Objective-C中的局部變量的運行時

LLDB screenshot

我發現一個LLDB命令frame variable(和gdb的info locals),其提供的局部變量的列表(如上面的屏幕截圖的右側看到的)。

我的希望是,這個功能可以在運行時的設備上執行。例如,我可以使用backtrace_symbols()訪問堆棧跟蹤,通過_cmd等當前選擇器訪問堆棧跟蹤。

有沒有人有這方面的經驗?提前致謝。

+0

有沒有辦法,只要使用Objective-C的運行時(我訪問類似於調試器的方式,局部變量我不太清楚你爲什麼要這麼做)。 LLDB/GDB依賴於在發行版本的二進制文件中缺少的調試信息。 –

回答

4

的Xcode/LLDB可以告訴你這個信息,因爲他們有機會獲得調試信息將二進制,被稱爲符號表,幫助其瞭解的存儲位置對應於的名字在你的源代碼。這些都在Objective-C運行時之外,並且在運行時沒有界面來實現它。

還有另外一個原因,這是不行的,雖然。在構建要在調試器中運行的代碼時,編譯器優化將關閉,因此您在代碼中引用的所有變量都在那裏。

當你建立了版本,不過,一般的編譯器優化在那裏得到的,並重新安排所有的精心命名的局部變量來使事情跑得更快。它們甚至可能永遠不會存儲在內存中,只存儲在CPU寄存器中。或者,如果優化器可以證明它不需要它們,它們可能根本不存在。

我的建議是重新考慮你正在試圖解決更大的問題...