1.使用LLDB進行調試:ios
1.1 dSYM文件存儲於目標相關的調試信息。建立工程時默認建立DSYM文件程序員
工程下DSYM文件:express
1.2 斷點:編程
1.2.1 異常斷點:程序停在拋出異常的哪行,而不會崩潰在MAIN函數裏。
服務器
1.2.2符號斷點:在symbol裏設置關注的符號
網絡
使用malloc_error_break 和[NSObject doesNotRecognizeSelector:]對調試內存相關的崩潰至關幫助,等效異常斷點。函數
1.2.3編輯斷點:
斷點導航面板中 ctrl+點擊斷點 進行編輯。進行狀態設置,好比循環i<1000,能夠設置斷點 i=500時起做用。而不用遍歷到500次。學習
1.3LLDB控制檯spa
1.3.1 打印標量變量.net
處理整形或結構體用p
p(int) self.maAge
p (CGPoint) self.view.center
po 打印對象
expr 能夠在調試時動態執行指定表達式,並將結果打印出來。經常使用於在調試過程當中修改變量的值。
call
call便是調用的意思。其實上述的po和p也有調用的功能。所以通常只在不須要顯示輸出,或是方法無返回值時使用call。 和上面的命令同樣,咱們依然在viewDidLoad:裏面設置斷點,而後在程序中斷的時候輸入下面的命令:
call [self.view setBackgroundColor:[UIColor redColor]]
繼續運行程序,看看view的背景顏色是否是變成紅色的了!在調試的時候靈活運用call命令能夠起到事半功倍的做用。
上面咱們簡單的學習瞭如何使用LLDB命令。但有時咱們在使用這些LLDB命令的時候,依然可能會遇到一些問題。
好比下面這個命令。
(lldb) p NSLog(@"%@",[self.view viewWithTag:1001]) error: 'NSLog' has unknown return type; cast the call to its declared return type error: 1 errors parsing expression
若是在使用LLDB命令中發現有 unknown type 的相似錯誤(多見於id類型,好比NSArray中某個值),那咱們就必須顯式聲明類型。好比上面這個命令,咱們得這麼修改。
p (void)NSLog(@"%@",[self.view viewWithTag:1001])
1.3.2打印寄存器
register read
1.3.3調試腳本編程 適合Python程序員
1.4 NSZombieEnabled標識
利用殭屍對象顯示日誌到調試器,在非ARC做用很大。在Xcode->Product-> scheme 選擇Enable Zombie Objects開啓。
1.5不一樣類型崩潰
EXC_BAD_ACCESS:訪問一個被釋放的對象或向它發送消息時。
SIGSEGV:常見緣由是不正確的類型轉換。
SIGBUS:表明無效內存訪問。
SIGTRAP:陷進信號,並不是崩潰信號。收到緣由不明的SIGTRAP,先清除上次的輸出,而後從新構建一般能解決問題。
SIGABRT:停止信號。當SIGABRT出現時,控制檯一般會輸出大量的信息,說明具體哪裏出錯了。因爲它是可控制的崩潰,在LLDB控制檯輸入bt命令打印回溯信息。
看門口超時: 固定錯誤碼:0x8badf00d.出如今同步網絡調用而阻塞主線程的時候。
1.6 斷言&&異常:有效的防止程序錯誤。
異常出現時會停止程序。
可用來記錄崩潰日誌。
1.7 收集崩潰報告
iTunes Connect下載崩潰報告。
第三方崩潰報告服務:
集成SDK,負責上傳dSYM文件到他們本身的服務器。
免費:TestFlight 桌面客戶端
付費:HockyApp
參考文章:
http://my.oschina.net/u/1244672/blog/615445?fromerr=8f1t5RAh
http://my.oschina.net/u/2340880/blog/665265
http://my.oschina.net/u/1244672/blog/650633?fromerr=bQnCwLIu#OSC_h1_4
http://ios.jobbole.com/82120/