一、斷點
基本操作:添加 、移除、監(jiān)視(Watch)某個變量。
普通斷點
Edit Breakpoint
1、Condition
這里可以輸入條件表達(dá)式,滿足條件的時候斷點就會生效。
2、Ingore
在這里可以設(shè)置忽略斷點次數(shù)。
3、Action
Action有6中類型
常用的就是Log Message和Debugger Command
Log Message:%B會打印斷點的名字,%H會打印斷點的調(diào)用次數(shù),@@中間可以輸入表達(dá)式
Debugger Command:po(打印對象信息),bt(打印函數(shù)棧),expression(表達(dá)式)。
勾選Automatically?continue?after?evaluating?actions之后程序會在斷點產(chǎn)生后繼續(xù)運(yùn)行??梢暂斎胝{(diào)試信息至于不暫停程序。(?)
全局?jǐn)帱c(Exception Breakpoint)
定位 main 里邊的?EXEC_BAD_ACCESS:問題。
OpenGL ES的斷點調(diào)試(OpenGL ES Error Breakpoint)
符號斷點(Symbolic Breakpoint)
當(dāng)程序運(yùn)行到特定符號的時候就會產(chǎn)生斷點。通過這種方式添加斷點,就不需要在源文件中添加,也不需要知道斷點設(shè)置在文件的第幾行。
比普通斷點多了兩個屬性Symbol和Module。
1. 方法名稱:會對所有具有此方法名稱的類方法生效。例如 initWithFrame: 。
2. 特定類的方法:OC類和C++類都適用,例如 ,[UIView initWithFrame:]或者 Shap::draw()。
3. 函數(shù)名稱。例如普通C函數(shù)。
Test Failure Breakpoint
二、打印
#defineNSLog(format, ...) do { \fprintf(stderr,"<%s : %d> %s\n", \
[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], \
__LINE__, __func__); \
(NSLog)((format), ##__VA_ARGS__); \
fprintf(stderr,"-------\n"); \
}while(0)
三、Console(lldb)控制臺命令
資料:http://objccn.io/issue-19-2/
常用調(diào)試命令
help --幫助
print --打印
expression —改變程序內(nèi)的值
po
//p和e來代替print和expression
LLDB 無法確定涉及的類型 (譯者注:返回的類型)
//? p (char)[[$array objectAtIndex:$a] characterAtIndex:0]
// p/d (char)[[$array objectAtIndex:$a] characterAtIndex:0]
四 、Address Sanitizer: 媽媽再也不用擔(dān)心 EXC_BAD_ACCESS?
EXC_BAD_ACCESS一直是很多開發(fā)者的噩夢,因為這個錯誤很不直觀,出現(xiàn)后往往要花很長時間才能定位到錯誤。蘋果這次帶來了革命性的提升。
在項目的Scheme中Diagnostics下,選中enable address sanitizer(注意選中后Xcode會重新編譯整個項目)。

這樣設(shè)置后,如果再出現(xiàn)類似的錯誤會有更詳細(xì)的錯誤信息提示,甚至?xí)袃?nèi)存使用情況的展示。