iOS調(diào)試技巧簡單介紹

一、斷點

基本操作:添加 、移除、監(jiān)視(Watch)某個變量。

普通斷點

Edit Breakpoint

1、Condition

這里可以輸入條件表達(dá)式,滿足條件的時候斷點就會生效。

2、Ingore

在這里可以設(shè)置忽略斷點次數(shù)。

3、Action

Action有6中類型

常用的就是Log MessageDebugger 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

//pe來代替printexpression

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)存使用情況的展示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容