定位模塊相關代碼的位置

項目代碼量大了之後,尋找某個頁面的功能對應的代碼就比較費勁了。我來講下平時用的比較多的一些方法。spa

 

1,斷點

1.1 採用symbolic 斷點

好比設置viewDidLoad斷點,系統會在全部的viewDidLoad方法中執行斷點,包括系統自身的類UIViewController 。在定位的時候比較有幫助。(之前接手別人項目的時候用過,當時以爲還挺好用的)debug

1.2 採用普通的斷點

好比熟悉代碼的狀況,大概知道是在某個方法中執行了,那就能夠設置普通的斷點。在斷點激活之後,能夠結合lldb命令查看或者修改變量的值。code

 

2,使用ViewDebug和LLDB命令

這個是我目前用的最多的方法了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

 

3,全局搜索標題文本等相關信息

好比當前頁面有一個固定的字符常量,就能夠全局搜索,大部分狀況下也能找到對應的代碼ast

 

4,經過NSLog來定位 

在項目中引入自定義的宏來覆蓋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__輸出了代碼在哪一行

相關文章
相關標籤/搜索