ios 除錯技巧收藏二 lldb命令
阿新 • • 發佈:2019-01-04
轉自: http://blog.csdn.net/likendsl/article/details/7576549
XCode4.0以後,編譯器換成了LLVM 編譯器 2.0
與以前相比,更加強大:
1.LLVM 編譯器是下一帶開源的編譯技術.完全支援C, Objective-C, 和 C++.
2.LLVM 速度比 GCC快兩倍,建立的程式也會執行的更快. 因為它更好的利用現代的晶片的結構.
3.LLVM和Xcode 4完全的整合在一起.包括關鍵字高亮,程式碼完整性等全都是由LLVM語法分析器來分析的. 這樣可以在編輯的時候就可以很好的瞭解你的程式碼.
編譯器進化之後,控制檯除錯命令字首,也由原來的gdb更改成了lldb,所以當你看到控制檯沒有gdb而出現lldb的時候,不用驚慌,因為我們以前常用的除錯命令依然可以使用:
使用前提:
1.既然是除錯命令,理所當然的,程式模式應該選擇Debug模式。
2.在Debug模式下,如果你的程式在執行中崩潰(Crash)掉,那麼恭喜你,使用lldb除錯的機會來了。
符合以上兩個條件之後,控制檯(即日誌輸出視窗All Output)會自動打出一個(lldb)命令,你在其後輸入bt,回車。
恭喜你,這時Xcode會自動輸出最後的一次呼叫堆疊。如下:
-
* 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
當然還有其他的命令(和gdb命令通用):
- 命令 解釋
- break NUM 在指定的行上設定斷點。
- bt 顯示所有的呼叫棧幀。該命令可用來顯示函式的呼叫順序。
- clear 刪除設定在特定原始檔、特定行上的斷點。其用法為:clear FILENAME:NUM。
- continue 繼續執行正在除錯的程式。該命令用在程式由於處理訊號或斷點而導致停止執行時。
- display EXPR 每次程式停止後顯示錶達式的值。表示式由程式定義的變數組成。
- file FILE 裝載指定的可執行檔案進行除錯。
- help NAME 顯示指定命令的幫助資訊。
- info break 顯示當前斷點清單,包括到達斷點處的次數等。
- info files 顯示被除錯檔案的詳細資訊。
- info func 顯示所有的函式名稱。
- info local 顯示當函式中的區域性變數資訊。
- info prog 顯示被除錯程式的執行狀態。
- info var 顯示所有的全域性和靜態變數名稱。
- kill 終止正被除錯的程式。
- list 顯示原始碼段。
- make 在不退出 gdb 的情況下執行 make 工具。
- next 在不單步執行進入其他函式的情況下,向前執行一行原始碼。
- print EXPR 顯示錶達式 EXPR 的值。
- print-object 列印一個物件
- print (int) name 列印一個型別
- print-object [artist description] 呼叫一個函式
- set artist = @"test" 設定變數值
- whatis 檢視變理的資料型別