1. 程式人生 > >ios 除錯技巧收藏二 lldb命令

ios 除錯技巧收藏二 lldb命令

轉自: 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會自動輸出最後的一次呼叫堆疊。如下:

  1. thread #1: tid = 0x1f03, 0x0132edee CoreFoundation`___forwarding___ + 206, stop reason = EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)  
  2.     frame #0: 0x0132edee CoreFoundation`___forwarding___ + 206  
  3.     frame #1: 0x0132ecb2 CoreFoundation`_CF_forwarding_prep_0 + 50  
  4.     frame #2: 0x00002e60 testMVC`-[ViewCtrl2 touchesBegan:withEvent:] + 128 at ViewCtrl2.m:40  
  5.     frame #3: 0x013c9e99 CoreFoundation`-[NSObject performSelector:withObject:withObject:] + 73  
  6.     frame #4: 0x000ffc49 UIKit`forwardTouchMethod + 268  
  7.     frame #5: 0x000ffb38 UIKit`-[UIResponder touchesBegan:withEvent:] + 30  
  8.     frame #6: 0x0003a2cf UIKit`-[UIWindow _sendTouchesForEvent:] + 272  
  9.     frame #7: 0x0003a5e6 UIKit`-[UIWindow sendEvent:] + 273  
  10.     frame #8: 0x00020dc4 UIKit`-[UIApplication sendEvent:] + 464  
  11.     frame #9: 0x00014634 UIKit`_UIApplicationHandleEvent + 8196  
  12.     frame #10: 0x012b2ef5 GraphicsServices`PurpleEventCallback + 1274  
  13.     frame #11: 0x0139c195 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53  
  14.     frame #12: 0x01300ff2 CoreFoundation`__CFRunLoopDoSource1 + 146  
  15.     frame #13: 0x012ff8da CoreFoundation`__CFRunLoopRun + 2218  
  16.     frame #14: 0x012fed84 CoreFoundation`CFRunLoopRunSpecific + 212  
  17.     frame #15: 0x012fec9b CoreFoundation`CFRunLoopRunInMode + 123  
  18.     frame #16: 0x012b17d8 GraphicsServices`GSEventRunModal + 190  
  19.     frame #17: 0x012b188a GraphicsServices`GSEventRun + 103  
  20.     frame #18: 0x00012626 UIKit`UIApplicationMain + 1163  
  21.     frame #19: 0x000026fa testMVC`main + 170 at main.m:16  
  22.     frame #20: 0x00002645 testMVC`start + 53  

當然還有其他的命令(和gdb命令通用):
  1. 命令                        解釋    
  2. break NUM               在指定的行上設定斷點。    
  3. bt                      顯示所有的呼叫棧幀。該命令可用來顯示函式的呼叫順序。    
  4. clear                   刪除設定在特定原始檔、特定行上的斷點。其用法為:clear FILENAME:NUM。    
  5. continue                繼續執行正在除錯的程式。該命令用在程式由於處理訊號或斷點而導致停止執行時。    
  6. display EXPR            每次程式停止後顯示錶達式的值。表示式由程式定義的變數組成。    
  7. file FILE               裝載指定的可執行檔案進行除錯。    
  8. help NAME               顯示指定命令的幫助資訊。    
  9. info break              顯示當前斷點清單,包括到達斷點處的次數等。    
  10. info files              顯示被除錯檔案的詳細資訊。    
  11. info func               顯示所有的函式名稱。    
  12. info local              顯示當函式中的區域性變數資訊。    
  13. info prog               顯示被除錯程式的執行狀態。    
  14. info var                顯示所有的全域性和靜態變數名稱。    
  15. kill                    終止正被除錯的程式。    
  16. list                    顯示原始碼段。    
  17. make                    在不退出 gdb 的情況下執行 make 工具。    
  18. next                    在不單步執行進入其他函式的情況下,向前執行一行原始碼。    
  19. print EXPR              顯示錶達式 EXPR 的值。     
  20. print-object            列印一個物件    
  21. print (int) name      列印一個型別    
  22. print-object [artist description]   呼叫一個函式    
  23. set artist = @"test"    設定變數值    
  24. whatis                  檢視變理的資料型別