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 的時間在編寫 上,剩下的大部分時間都是在除錯程式。在網上看到很多人...