IOS調試lldb命令常用,po,

相關備忘文章:Xcode控制檯調試


lldb命令常用(備忘)

假如你準備在模擬器裏面運行這個,你可以在“(lldb)”提示的後面輸入下面的:

(lldb) po $eax

LLDB在xcode4.3或者之後的版本里面是默認的調試器。假如你正在使用老一點版本的xcode的話,你又GDB調試器。他們有一些基本的相同的命令,因此假如你的xcode使用的是“(gdb)”提示,而不是“(lldb)”提示的話,你也能夠更隨一起做,而沒有問題。

“po”命令是“print object”(打印對象)的簡寫。“$eax”是cup的一個寄存器。在一個異常的情況下,這個寄存器將會包含一個異常對象的指針。注意:$eax只會在模擬器裏面工作,假如你在設備上調試,你將需要使用”$r0″寄存器。

例如,假如你輸入:

(lldb) po [$eax class]

你將會看像這樣的東西:

(id) $2 = 0x01446e84 NSException

這些數字不重要,但是很明顯的是你正在處理的NSException對象在這裏。

你可以對這個對象調用任何方法。例如:

(lldb) po [$eax name]

這個將會輸出這個異常的名字,在這裏是NSInvalidArgumentException,並且:

(lldb) po [$eax reason]

這個將會輸出錯誤消息:

(unsigned int) $4 = 114784400 Receiver () has no segue with identifier 'ModalSegue'

 

注意:當你僅僅使用了“po $eax”,這個命令將會對這個對象調用“description”方法和打印出來,在這個情況下,你也會得到錯誤的消息。

 

 

 

實用LLDB命令

命令名 用法 說明

expr expr 表達式 可以在調試時動態執行指定表達式,並將結果打印出來,很有用的命令。
po po 表達式 與expr類似,打印對象,會調用對象description方法。是print-object的簡寫
print print (type) 表達式 也是打印命令,需要指定類型。
bt bt [all] 打印調用堆棧,是thread backtrace的簡寫,加all可打印所有thread的堆棧。
br l br l breakpoint list的簡寫
process continue l process continue 簡寫:c
thread step-in l thread step-in l 簡寫:s
thread step-inst l thread step-inst l 簡寫:si
thread step-over l thread step-over l 簡寫:n
thread step-over-inst l thread step-over-inst l 簡寫:ni
thread step-out l thread step-out l 簡寫:f
thread list thread list 簡寫:th l

 

 

內存泄漏隱患提示
Potential Leak of an object allocated on line ……
數據賦值隱患提示
The left operand of …… is a garbage value;
對象引用隱患提示
Reference-Counted object is used after it is released;

對retain、copy、init、release、autorelease等在計數時的使用情況的詳細講解,推薦一下:

http://www.cnblogs.com/andyque/archive/2011/08/08/2131236.html

調用autorelease這意味着,你可以在這個函數裏面使用vari,但是,一旦下一次run loop被調用的時候,它就會被髮送release對象。然後引用計數改爲0,那麼內存也就被釋放掉了。(關於autorelease到底是怎麼工作的,我的理解是:每一個線程都有一個autoreleasePool的棧,裏面放了很多autoreleasePool對象。當你向一個對象發送autorelease消息之後,就會把該對象加到當前棧頂的autoreleasePool中去。噹噹前runLoop結束的時候,就會把這個pool銷燬,同時對它裏面的所有的autorelease對象發送release消息。而autoreleasePool是在當前runLoop開始的時候創建的,並壓入棧頂。那麼什麼是一個runLoop呢?一個UI事件,Timer call, delegate call, 都會是一個新的Runloop。)

 

 

 

 

當程序崩潰的時候怎麼辦,有如下兩部分(英文版的):

http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1

(中文的part-1)http://article.ityran.com/archives/1006

http://www.raywenderlich.com/10505/my-app-crashed-now-what-part-2

(中文的part-2)http://article.ityran.com/archives/1143

 

 

內存使用詳細介紹:

http://www.cocoachina.com/bbs/simple/?t94017.html


蘋果官方的Mac OS X Debugging Magic,詳細講述了最爲一個高級蘋果程序員應該具備的調試技巧

http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章