項目代碼量大了之後,尋找某個頁面的功能對應的代碼就比較費勁了。我來講下平時用的比較多的一些方法。spa
好比設置viewDidLoad斷點,系統會在全部的viewDidLoad方法中執行斷點,包括系統自身的類UIViewController 。在定位的時候比較有幫助。(之前接手別人項目的時候用過,當時以爲還挺好用的)debug
好比熟悉代碼的狀況,大概知道是在某個方法中執行了,那就能夠設置普通的斷點。在斷點激活之後,能夠結合lldb命令查看或者修改變量的值。code
這個是我目前用的最多的方法了orm
在Xcode中選擇Debug -> view debug -> capture Hiearachy ip
而後找到控制器view對應的視圖,右鍵print view description 會獲得以下信息內存
<UIView: 0x7fae04946fb0; frame = (0 64; 414 672); autoresize = W+H; layer = <CALayer: 0x7fae04963350>>
在lldb中輸入 (lldb) po [0x7fae04946fb0 nextResponder]string
就能夠得到控制器的類和地址,就能夠用shift + option + o 找到對應的代碼位置了。it
若是當前打印的視圖不是控制器對應的視圖,那會輸出其父視圖的description,利用其內存地址再次打印nextResponder便可。io
好比當前頁面有一個固定的字符常量,就能夠全局搜索,大部分狀況下也能找到對應的代碼ast
在項目中引入自定義的宏來覆蓋NSLog方法。固然若是集成了CocoaLumberjack ,用起來會更方便。
/** * 北京時間 * */ #define BeijingTimeString [[NSString stringWithFormat:@"%@",[[NSDate date]dateByAddingTimeInterval:8.0*3600]] substringToIndex:20] //調整輸出的語句,顯示在哪一個文件的第幾行輸出了內容 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"%s\n%s:%d\t%s\n",[BeijingTimeString UTF8String],[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]); #else #define NSLog(FORMAT,...) #endif
主要是__FILE__ 輸出了代碼在哪一個文件,__LINE__輸出了代碼在哪一行