調試

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

Crash文件解析:

http://ios.jobbole.com/82120/

相關文章
相關標籤/搜索