生活随笔
收集整理的這篇文章主要介紹了
XCode的控制台调试命令
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
XCode4.0以后,編譯器換成了LLVM 編譯器 2.0,與以前相比,更加強(qiáng)大:
1.LLVM 編譯器是下一帶開源的編譯技術(shù).完全支持C, Objective-C, 和 C++.
2.LLVM 速度比 GCC快兩倍,建立的程序也會(huì)運(yùn)行的更快. 因?yàn)樗玫睦矛F(xiàn)代的芯片的結(jié)構(gòu).
3.LLVM和Xcode 4完全的整合在一起.包括關(guān)鍵字高亮,代碼完整性等全都是由LLVM語(yǔ)法分析器來(lái)分析的. 這樣可以在編輯的時(shí)候就可以很好的了解你的代碼.
編譯器進(jìn)化之后,控制臺(tái)調(diào)試命令前綴,也由原來(lái)的gdb更改成了lldb,所以當(dāng)你看到控制臺(tái)沒有g(shù)db而出現(xiàn)lldb的時(shí)候,不用驚慌,因?yàn)槲覀円郧俺S玫恼{(diào)試命令依然可以使用:
使用前提:
1.既然是調(diào)試命令,理所當(dāng)然的,程序模式應(yīng)該選擇Debug模式。
2.在Debug模式下,如果你的程序在運(yùn)行中崩潰(Crash)掉,那么恭喜你,使用lldb調(diào)試的機(jī)會(huì)來(lái)了。
符合以上兩個(gè)條件之后,控制臺(tái)(即日志輸出窗口All Output)會(huì)自動(dòng)打出一個(gè)(lldb)命令,你在其后輸入bt,回車。
恭喜你,這時(shí)Xcode會(huì)自動(dòng)輸出最后的一次調(diào)用堆棧。如下:
[cpp]?view plaincopyprint? *?thread?#1:?tid?=?0x1f03,?0x0132edee?CoreFoundation`___forwarding___?+?206,?stop?reason?=?EXC_BREAKPOINT?(code=EXC_I386_BPT,?subcode=0x0)?? ????frame?#0:?0x0132edee?CoreFoundation`___forwarding___?+?206?? ????frame?#1:?0x0132ecb2?CoreFoundation`_CF_forwarding_prep_0?+?50?? ????frame?#2:?0x00002e60?testMVC`-[ViewCtrl2?touchesBegan:withEvent:]?+?128?at?ViewCtrl2.m:40?? ????frame?#3:?0x013c9e99?CoreFoundation`-[NSObject?performSelector:withObject:withObject:]?+?73?? ????frame?#4:?0x000ffc49?UIKit`forwardTouchMethod?+?268?? ????frame?#5:?0x000ffb38?UIKit`-[UIResponder?touchesBegan:withEvent:]?+?30?? ????frame?#6:?0x0003a2cf?UIKit`-[UIWindow?_sendTouchesForEvent:]?+?272?? ????frame?#7:?0x0003a5e6?UIKit`-[UIWindow?sendEvent:]?+?273?? ????frame?#8:?0x00020dc4?UIKit`-[UIApplication?sendEvent:]?+?464?? ????frame?#9:?0x00014634?UIKit`_UIApplicationHandleEvent?+?8196?? ????frame?#10:?0x012b2ef5?GraphicsServices`PurpleEventCallback?+?1274?? ????frame?#11:?0x0139c195?CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__?+?53?? ????frame?#12:?0x01300ff2?CoreFoundation`__CFRunLoopDoSource1?+?146?? ????frame?#13:?0x012ff8da?CoreFoundation`__CFRunLoopRun?+?2218?? ????frame?#14:?0x012fed84?CoreFoundation`CFRunLoopRunSpecific?+?212?? ????frame?#15:?0x012fec9b?CoreFoundation`CFRunLoopRunInMode?+?123?? ????frame?#16:?0x012b17d8?GraphicsServices`GSEventRunModal?+?190?? ????frame?#17:?0x012b188a?GraphicsServices`GSEventRun?+?103?? ????frame?#18:?0x00012626?UIKit`UIApplicationMain?+?1163?? ????frame?#19:?0x000026fa?testMVC`main?+?170?at?main.m:16?? ????frame?#20:?0x00002645?testMVC`start?+?53??
當(dāng)然還有其他的命令(和gdb命令通用):
[cpp]?view plaincopyprint? 命令????????????????????????解釋???? break?NUM???????????????在指定的行上設(shè)置斷點(diǎn)。???? bt??????????????????????顯示所有的調(diào)用棧幀。該命令可用來(lái)顯示函數(shù)的調(diào)用順序。???? clear???????????????????刪除設(shè)置在特定源文件、特定行上的斷點(diǎn)。其用法為:clear?FILENAME:NUM。???? continue????????????????繼續(xù)執(zhí)行正在調(diào)試的程序。該命令用在程序由于處理信號(hào)或斷點(diǎn)而導(dǎo)致停止運(yùn)行時(shí)。???? display?EXPR????????????每次程序停止后顯示表達(dá)式的值。表達(dá)式由程序定義的變量組成。???? file?FILE???????????????裝載指定的可執(zhí)行文件進(jìn)行調(diào)試。???? help?NAME???????????????顯示指定命令的幫助信息。???? info?break??????????????顯示當(dāng)前斷點(diǎn)清單,包括到達(dá)斷點(diǎn)處的次數(shù)等。???? info?files??????????????顯示被調(diào)試文件的詳細(xì)信息。???? info?func???????????????顯示所有的函數(shù)名稱。???? info?local??????????????顯示當(dāng)函數(shù)中的局部變量信息。???? info?prog???????????????顯示被調(diào)試程序的執(zhí)行狀態(tài)。???? info?var????????????????顯示所有的全局和靜態(tài)變量名稱。???? kill????????????????????終止正被調(diào)試的程序。???? list????????????????????顯示源代碼段。???? make????????????????????在不退出?gdb?的情況下運(yùn)行?make?工具。???? next????????????????????在不單步執(zhí)行進(jìn)入其他函數(shù)的情況下,向前執(zhí)行一行源代碼。???? print?EXPR??????????????顯示表達(dá)式?EXPR?的值。????? print-object????????????打印一個(gè)對(duì)象???? print?(int)?name??????打印一個(gè)類型???? print-object?[artist?description]???調(diào)用一個(gè)函數(shù)???? set?artist?=?@"test"????設(shè)置變量值???? whatis??????????????????查看變理的數(shù)據(jù)類型???
使用lldb調(diào)試工具,結(jié)合NSZombieEnabled?一起使用,實(shí)在是查找crash的一大利器啊,很是方便!
本文轉(zhuǎn)載自:http://blog.csdn.net/likendsl/article/details/7576549
總結(jié)
以上是生活随笔為你收集整理的XCode的控制台调试命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。