序言
Xcode 是運(yùn)行在操作系統(tǒng)Mac OS X上的集成開發(fā)工具(IDE)碎浇,它的功能非常強(qiáng)大临谱,當(dāng)我們對它有一個(gè)很全面的認(rèn)識后,對于開發(fā)效率會(huì)大大的提升奴璃。
目錄
- 斷點(diǎn)調(diào)試
- 條件斷點(diǎn)
- 全局?jǐn)帱c(diǎn)
- 開啟僵尸對象監(jiān)聽
一 斷點(diǎn)調(diào)試
1.1 條件斷點(diǎn)
在開發(fā)過程中悉默,可能需要在滿足某一些條件的時(shí)候,需要查看相關(guān)變量苟穆,比如用戶點(diǎn)贊數(shù)超過50的時(shí)候麦牺,中斷執(zhí)行。效果如圖所示
我們直接在所在行單擊鞭缭,然后選擇Edit Breakpoint...
即可
然后運(yùn)行程序
我們可以發(fā)現(xiàn)剖膳,每次點(diǎn)贊次數(shù)
model.likeNum
的值大于50的時(shí)候都會(huì)暫停運(yùn)行。
1.2 全局?jǐn)帱c(diǎn)
一般在開發(fā)中岭辣,我們期望在程序崩潰的時(shí)候可以直接定位到某一行代碼吱晒,這樣方便調(diào)試及解決問題,這個(gè)時(shí)候全局?jǐn)帱c(diǎn)就派上用場了沦童。
沒有設(shè)置全局?jǐn)帱c(diǎn)之前
數(shù)組只有三個(gè)元素仑濒,訪問第四個(gè)元素
- (void)tapDebugLbe {
NSArray *arrays = @[@"1",@"2",@"3"];
NSLog(@"%@",arrays[3]);
}
運(yùn)行結(jié)果
程序崩潰,但是沒有定位到出錯(cuò)的代碼行處偷遗,而是直接定位到
main
函數(shù)墩瞳。
添加全局?jǐn)帱c(diǎn)
1.首先進(jìn)入到斷點(diǎn)設(shè)置
2.點(diǎn)擊+選擇Add Symbolic Breakpoint
3.在彈出的視圖中輸入-[NSException raise]
然后敲回車,點(diǎn)擊空白處就行了
4.然后再次重復(fù)上一步Add Symbolic Breakpoint氏豌,在彈出的視圖中輸入objc_exception_throw喉酌,然后敲回車,點(diǎn)擊空白處泵喘。
這樣我們就完成了全局?jǐn)帱c(diǎn)的設(shè)置泪电,我們再重復(fù)剛剛崩潰的操作看看情況如何。
發(fā)生崩潰纪铺,但是代碼直接定位在出錯(cuò)的地方相速,我們直接修正就可以了。
二 開啟僵尸對象監(jiān)聽
1個(gè)已經(jīng)被釋放的對象 就叫做僵尸對象鲜锚。
野指針:指針指向的對象已經(jīng)被回收掉了.這個(gè)指針就叫做野指針.
“Thread 1:EXC_BAD_ACCESS(code=1,address=0x4000)
的由來
使用野指針訪問僵尸對象.有的時(shí)候會(huì)出問題,有的時(shí)候不會(huì)出問題.
- 當(dāng)野指針指向的僵尸對象所占用的空間還沒有分配給別人的時(shí)候,這個(gè)時(shí)候其實(shí)是可以訪問的,因?yàn)閷ο蟮臄?shù)據(jù)還在突诬。
- 當(dāng)野指針指向的對象所占用的空間分配給了別人的時(shí)候 這個(gè)時(shí)候訪問就會(huì)出問題苫拍。就會(huì)報(bào)壞內(nèi)存訪問,即
EXC_BAD_ACCESS
開啟僵尸對象監(jiān)聽
- product -> scheme -> Edit Scheme
- Run -> Diagnostics -> Zombie Objects
實(shí)例代碼如下
@interface HomeViewController ()
/** array*/
@property(nonatomic,assign)NSArray *array; // 注意用assign修飾
@end
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *array = @[@"11111"];
self.array = array;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSLog(@"%@",[self.array objectAtIndex:0]);
}
運(yùn)行結(jié)果
當(dāng)我們添加僵尸對象監(jiān)聽后旺隙,當(dāng)訪問野指針訪問了僵尸對象發(fā)生崩潰時(shí)會(huì)自動(dòng)定位到訪問壞內(nèi)存的地方绒极,這樣就可以快速解決問題了。
本文會(huì)持續(xù)更新催束,如果喜歡集峦,歡迎訂閱。如有錯(cuò)誤抠刺,歡迎指正塔淤。