自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

XCode調(diào)試技巧之EXC_BAD_ACCESS中BUG解決

移動(dòng)開(kāi)發(fā) iOS
本文介紹的是XCode調(diào)試技巧之EXC_BAD_ACCESS中BUG解決,如何解決,來(lái)看詳細(xì)內(nèi)容。

XCode調(diào)試技巧之EXC_BAD_ACCESS中BUG解決是本文要介紹的內(nèi)容,在iphone開(kāi)發(fā)的時(shí)候EXC_BAD_ACCESS這個(gè)bug時(shí)不容易找到原因的,在網(wǎng)上找到的3個(gè)關(guān)于這個(gè)問(wèn)題的方法,希望可以幫到你,我自己試了一下第一中方法,效果還不錯(cuò)

首先說(shuō)一下 EXC_BAD_ACCESS 這個(gè)錯(cuò)誤,可以這么說(shuō),90%的錯(cuò)誤來(lái)源在于對(duì)一個(gè)已經(jīng)釋放的對(duì)象進(jìn)行release操作。

1. 重寫(xiě)object的respondsToSelector方法,現(xiàn)實(shí)出現(xiàn)EXEC_BAD_ACCESS前訪問(wèn)的最后一個(gè)object

有時(shí)程序崩潰根本不知錯(cuò)誤發(fā)生在什么地方。比如程序出現(xiàn)EXEC_BAD_ACCESS的時(shí)候,雖然大部分情況使用設(shè)定 NSZombieEnabled環(huán)境變量可以幫助你找到問(wèn)題的所在,但少數(shù)情況下,即使設(shè)定了NSZombieEnabled環(huán)境變量,還是不知道程序崩 潰在什么地方。那么就需要使用下列代碼進(jìn)行幫助了:

  1.  #ifdef _FOR_DEBUG_  
  2. -(BOOL) respondsToSelector:(SEL)aSelector {  
  3.     printf("SELECTOR: %s\n", [NSStringFromSelector(aSelector) UTF8String]);  
  4.     return [super respondsToSelector:aSelector];  
  5. }  
  6. #endif  

你需要在每個(gè)object的.m或者.mm文件中加入上面代碼,并且在 other c flags中加入-D _FOR_DEBUG_(記住請(qǐng)只在Debug Configuration下加入此標(biāo)記)。這樣當(dāng)你程序崩潰時(shí),Xcode的console上就會(huì)準(zhǔn)確地記錄了最后運(yùn)行的object的方法。

2. 通過(guò)NSZombieEnabled

相信很多人都知道通過(guò)NSZombies來(lái)幫助調(diào)試出現(xiàn)EXC_BAD_ACCESS的情況,但有時(shí)還是找不到需要的信息,那么應(yīng)該怎么辦呢?

下面通過(guò)一個(gè)例子來(lái)說(shuō)明.下面是hello world的代碼:

  1. NSString* hello = [NSString stringWithFormat:@"Hello world"];  
  2. NSLog(@"What you say is %@",hello);  
  3. [hello release];  

運(yùn)行后出現(xiàn)EXC_BAD_ACCESS錯(cuò)誤.但沒(méi)有其他任何提示,這時(shí) 候通過(guò)右擊executables下的應(yīng)用程序名,選擇get info后,在arguments下輸入環(huán)境變量(NSZombieEnabled,MallocStackLogging)

再次運(yùn)行后程序crash,如圖:(單擊放大)

XCode調(diào)試技巧之EXC_BAD_ACCESS中BUG解決

這次可以看到問(wèn)題是”message sent to dealloced object”了,但具體是哪個(gè)語(yǔ)句引起的還并不知道,于是需要在gdb上輸入以下語(yǔ)句:

  1. shell malloc_history pid address 

那么pid和address是什么呢?再看下crash的圖片結(jié)合一下我以下使用的命令,你應(yīng)該很快就可以判定pid和address是從哪里來(lái)的了,我的命令是:

  1. shell malloc_history 596 0×5f3ef80 

再次運(yùn)行,程序crash時(shí)會(huì)出現(xiàn)大量的stack trace信息,如下圖是與本程序相關(guān)的:

XCode調(diào)試技巧之EXC_BAD_ACCESS中BUG解決

根據(jù)這些信息大家就可以找到問(wèn)題出現(xiàn)在[BadAccessViewController viewDidLoad] 中與 +[NSString stringWithFormat:] 有關(guān)的地方.

最后大家記得把環(huán)境變量NSZombieEnabled,MallocStackLogging刪除或設(shè)置為NO,因?yàn)樗鼈儠?huì)使得內(nèi)存不會(huì)被釋放.

3、設(shè)置全局?jǐn)帱c(diǎn)快速定位問(wèn)題代碼所在行

XCode調(diào)試技巧–設(shè)置全局?jǐn)帱c(diǎn)快速定位問(wèn)題代碼所在行[zz]

小結(jié):XCode調(diào)試技巧之EXC_BAD_ACCESS中BUG解決的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2013-04-18 10:19:40

iOS開(kāi)發(fā)Xcode調(diào)試

2012-05-21 10:13:05

XCode調(diào)試技巧

2013-03-29 13:17:53

XCode調(diào)試技巧iOS開(kāi)發(fā)

2011-07-20 14:31:56

XCode User Scrip 腳本

2011-08-08 17:05:02

XCode UserScript 腳本

2014-03-12 09:52:17

XcodeCode Snippe

2023-10-11 13:32:30

2011-02-22 16:09:53

Eclipse調(diào)試

2013-12-17 16:01:02

iOSXcodeInstruments

2011-07-28 14:31:55

Xcode 調(diào)試 異常

2011-08-11 16:31:08

XCode

2013-05-20 15:04:02

Android調(diào)試查看日志Android開(kāi)發(fā)

2011-07-26 14:44:53

調(diào)試 Xcode

2013-04-18 09:55:56

iOS開(kāi)發(fā)Xcode調(diào)試斷點(diǎn)

2011-08-01 17:50:28

Xcode

2010-09-02 11:03:48

CSS

2013-07-31 13:36:07

Windows PhoVS調(diào)試技巧Windows Pho

2011-08-04 18:09:32

Xcode 技巧 文檔

2023-08-31 16:43:46

軟件開(kāi)發(fā)調(diào)試

2011-08-19 15:16:41

XCodeUserScripts腳本
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)