ios基礎之除錯篇

2021-07-09 07:14:15 字數 2989 閱讀 2593

1.常用3種斷點

檔案行斷點:在某一行**處的斷點

符號斷點:可以定位到某些方法

異常斷點:可以在丟擲或者捕獲異常時呼叫,可以選擇不同的語言(c/c++/object-c)

swift斷點:捕捉swift中的錯誤

測試失敗的斷點:還未嘗試過.

2.丟擲異常:使用斷言nsassert

nsassert

(i<

95, 

@"i=%d

已經大於95了

",i);

還能使用nsassert1,nsassert2,nsassert3,nsassert4,nsassert5.

3.發布時移除nsassert

步驟:為工程新增乙個新的scheme,命名最好不同;

編輯這個新的scheme,在info選項->build configuration 下改為release,為發布而配置。

為release選項新增ns_block_assertions即可。

(注:ns_block_assertions是foundation框架中定義好的預處理巨集)

4.發布時移除nslog

基本思路是用乙個新的輸出的巨集取代nslog,如果是已有的工程可能工作量比較大.

在pch檔案中加入新的巨集:

/*#ifdef  debug

#     define dlog(...) nslog(__va_args__)

#else

#     define dlog(...)

#endif */

注意__va_args__前後是長橫。

將debug改為debug或者debug=1.(新的系統下應該可以省略這一步)

記得以後輸出時統一使用dlog即可.

5.使用lldb除錯工具

進入lldb工具:設定乙個斷點,執行到斷點時,將all output改為debugger output.

5.1 使用命令設定斷點(在第30行):

(lldb) 

breakpoint set --file viewcontroller.m --line 31

(lldb) 

br s -f viewcontroller.m -l 30

(lldb) 

b viewcontroller.m:31

如果要在所有用某個方法呼叫時掛起(符號斷點),命令如下:

(lldb) 

breakpoint set --selector findall

(lldb) 

br s -s findall

檢視斷點:

(lldb) 

breakpoint list

(lldb) 

br l

刪除斷點(每個斷點都有編號):

(lldb) 

breakpoint delete

(lldb) 

br del

單步進入:

(lldb) 

thread step-in

(lldb) 

step

(lldb) s

單步跳過:

(lldb) 

thread step-over

(lldb) 

next

(lldb) n

繼續執行:

(lldb) 

thread continue

(lldb) 

continue

(lldb) c

5.2   觀察點變化(可以檢視變數的變化)

設定觀察點

(lldb) 

watchpoint set variable sum

(lldb) 

wa s v sum

檢視觀察點

(lldb) 

watchpoint list

(lldb) 

watch l

刪除觀察點(沒有編號則會刪除所有觀察點)

(lldb) 

watchpoint delete 觀察點編號

(lldb) 

watch delete 觀察點編號

(lldb) 

watch del 觀察點編號

5.3檢視變數和計算表示式命令

(lldb) 

frame variable

(lldb) 

fr v

單個變數

(lldb) 

frame variable sum

(lldb) 

fr variable

(lldb) 

fr v

(lldb) 

print sum

檢視全域性變數

(lldb) 

target variable

(lldb) 

ta v

計算基本資料型別表示式

(lldb) 

expression sum

(lldb) 

expr sum

(lldb) 

p sum  //列印單個變數

計算物件資料型別表示式

(lldb) 

expression -o -- self.textarray[0]

(lldb) 

po self.textarray[2]

6.異常堆疊報告分析

將main函式改為如下

@try }

@catch

(n***ception *exception)

所有的異常最後都會丟擲到main函式中。檢視輸出的異常日誌。

3   breakpointtest                      0x000df6fb -[viewcontroller viewdidload] + 446

7.除錯問題彙總

1.如果能夠捕獲到異常使用異常分析機制,或者檢視崩潰日誌

2.如果無法捕獲異常,也沒有輸出則需要保證方法不要重複呼叫,否則可能引起記憶體問題。

Visual Studio除錯之斷點基礎篇

我曾經問過很多人,你一般是怎麼除錯你的程式的?f9,f5,f11,f 有很多書和文章都是介紹怎麼使用visual studio編寫winform啦,asp.net之類的程式 知道如何編寫固然重要,但是我覺得程式設計師可能只會花費30 的時間在編寫 上,剩下的大部分時間都是在除錯程式。在網上看到很多人...

Visual Studio除錯之斷點基礎篇

我曾經問過很多人,你一般是怎麼除錯你的程式的?f9,f5,f11,f 有很多書和文章都是介紹怎麼使用visual studio編寫winform啦,asp.net之類的程式 知道如何編寫固然重要,但是我覺得程式設計師可能只會花費30 的時間在編寫 上,剩下的大部分時間都是在除錯程式。在網上看到很多人...

Visual Studio除錯之斷點基礎篇

我曾經問過很多人,你一般是怎麼除錯你的程式的?f9,f5,f11,f 有很多書和文章都是介紹怎麼使用visual studio編寫winform啦,asp.net之類的程式 知道如何編寫固然重要,但是我覺得程式設計師可能只會花費30 的時間在編寫 上,剩下的大部分時間都是在除錯程式。在網上看到很多人...