iOS (8) --報錯警告調(diào)試

<h1>1歪架、你在實際開發(fā)中矫夷,有哪些手機架構(gòu)與性能調(diào)試經(jīng)驗</h1>

1 > 剛接手公司的舊項目時葛闷,模塊特別多,而且?guī)缀跛械拇a都寫在控制器里面双藕,比如UI控件代碼淑趾、網(wǎng)絡請求代碼、數(shù)據(jù)存儲代碼
2> 接下來采取MVC模式進行封裝忧陪、重構(gòu):
a> 自定義UI控件封裝內(nèi)部的業(yè)務邏輯
b> 封裝網(wǎng)絡請求工具類(降低耦合)
c> 封裝數(shù)據(jù)存儲工具類

<h1>2扣泊、BAD_ACCESS在什么情況下出現(xiàn)?</h1>

這種問題是經(jīng)常遇到的嘶摊,在開發(fā)時經(jīng)常會出現(xiàn)BAD_ACCESS延蟹。
原因是訪問了野指針,比如訪問已經(jīng)釋放對象的成員變量或者發(fā)消息叶堆、死循環(huán)等阱飘。

<h1>3、如何調(diào)試BAD_ACCESS錯誤蹂空?</h1>

出現(xiàn)BAD_ACCESS錯誤俯萌,通常是訪問了野指針,比如訪問了已經(jīng)釋放了的對象上枕「牢酰快速定位問題的步驟有:
1.    重寫對象的respondsToSelector方法,先找到出現(xiàn)EXECBADACCESS前訪問的最后一個object
2.    設(shè)置Enable Zombie Objects
3.    設(shè)置全局斷點快速定位問題代碼所在行辨萍,接收所有的異常
4.    Xcode7已經(jīng)集成了BAD_ACCESS捕獲功能:Address Sanitizer棋恼,與步驟2一樣設(shè)置
5.    analyze也行(不一定管用)

<h1>4返弹、什么時候會報 unrecognized selector 異常?</h1>

當調(diào)用對象(子類爪飘,各級父類)中不含有對應方法的時候义起,并且依舊沒有給出“消息轉(zhuǎn)發(fā)”的具體方案的時候,程序在運行時會crash并拋出 unrecognized selector 異常

objective-c 中的每個方法在運行時會被轉(zhuǎn)為消息發(fā)送objc_msgSend(reciver, selector)

例如 [person say]就會被轉(zhuǎn)化為 objc_msgSend(person, @selector(say))

運行時會根據(jù)對象(reciever) 的isa 指針找到該對象所對應的類师崎,然后會依次在對應的類默终,父類,爺爺類犁罩,根類中找對應的方法

下面只講述對象方法的解析過程:

第一步:+ (BOOL)resolveInstanceMethod:(SEL)sel實現(xiàn)方法齐蔽,指定是否動態(tài)添加方法。若返回NO床估,則進入下一步含滴,若返回YES,則通過class_addMethod函數(shù)動態(tài)地添加方法,消息得到處理,此流程完畢捂刺。
第二步:在第一步返回的是NO時,就會進入- (id)forwardingTargetForSelector:(SEL)aSelector方法碑韵,這是運行時給我們的第二次機會,用于指定哪個對象響應這個selector缎脾。不能指定為self泼诱。若返回nil,表示沒有響應者赊锚,則會進入第三步。若返回某個對象屉栓,則會調(diào)用該對象的方法舷蒲。
第三步:若第二步返回的是nil,則我們首先要通過- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector指定方法簽名友多,若返回nil牲平,則表示不處理。若返回方法簽名域滥,則會進入下一步纵柿。
第四步:當?shù)谌椒祷胤椒ǚ椒ê灻螅蜁{(diào)用- (void)forwardInvocation:(NSInvocation *)anInvocation方法启绰,我們可以通過anInvocation對象做很多處理昂儒,比如修改實現(xiàn)方法,修改響應對象等
第五步:若沒有實現(xiàn)- (void)forwardInvocation:(NSInvocation *)anInvocation方法委可,那么會進入- (void)doesNotRecognizeSelector:(SEL)aSelector方法渊跋。若我們沒有實現(xiàn)這個方法,那么就會crash,然后提示打不到響應的方法拾酝。到此燕少,動態(tài)解析的流程就結(jié)束了。

<h1>5蒿囤、有哪些常見的 Crash 場景客们?</h1>

訪問了僵尸對象
訪問了不存在的方法
數(shù)組越界
在定時器下一次回調(diào)前將定時器釋放,會Crash

<h1>6、lldb(gdb)常用的調(diào)試命令材诽?</h1>

?    p 輸出基本類型//p (int)[[[self view] subviews] count]
?    po 用于輸出 Objective-C 對象//po [self view]
?    expr 可以在調(diào)試時動態(tài)執(zhí)行指定表達式底挫,并將結(jié)果打印出來。常用于在調(diào)試過程中修改變量的值岳守。//源代碼中 a = 1 凄敢;expr a=2 輸出結(jié)果:(int) $0 = 2

<h1>7、如果一個函數(shù)10次中有7次正確湿痢,3次錯誤涝缝,問題可能出現(xiàn)在哪里?</h1>

這樣的問題通過應聘者的分析譬重,可以知道應聘者的功底如何拒逮。很多人的回答會是很簡單的,沒有從多方面去分析臀规。這樣的問題也是很有意義的滩援,在項目開發(fā)中所產(chǎn)生的bug,有的時候會出現(xiàn)這樣的情況塔嬉,而代碼量比較大且業(yè)務比較復雜時玩徊,通過其他工具并不能分析出來是什么bug,但是我們卻可以根據(jù)出現(xiàn)的頻率推測谨究。筆者把這個問題當作測試部反饋過來的bug描述問題來分析一下恩袱。
參考答案:
從問題描述可知,bug不會必現(xiàn)的胶哲,因此無法直接定位出錯之處畔塔。從以下角度出現(xiàn)來分析可能出錯之處:
1.    因出錯并不是崩潰,因此沒有錯誤日志可看鸯屿。第一步就是分析函數(shù)中的所有分支澈吨,是否在語法上存在可能缺少條件的問題。所以寄摆,檢查所有的分支谅辣,確保每個分支執(zhí)行的結(jié)果的正確的
2.    檢測函數(shù)的參數(shù),保證必傳參數(shù)不能為空婶恼,若為空應該拋出異常屈藐。因此榔组,用斷言檢測參數(shù)的正確性是很重要的。
3.    檢測函數(shù)中每個分支所調(diào)用的函數(shù)返回結(jié)果是正確的联逻,其實就是一個遞歸的過程(步驟1搓扯、2)

<h1>8、你一般是如何調(diào)試Bug的包归?</h1>

個問題看起來很籠統(tǒng)锨推,但又一針見血。通過應聘者的回答公壤,可很直觀地看出這個應聘者的處理bug的能力换可,以及其解決問題的思維。
參考答案:
Bug分為測試中的Bug和線上的Bug:
?    線上Bug:項目使用了友盟統(tǒng)計厦幅,因此會有崩潰日志沾鳄,通過解析dYSM可以直接定位到大部分bug崩潰之處。解決線上bug需要從主干拉一個新的分支确憨,解決bug并測試通過后译荞,再合并到主干,然后上線休弃。若是多團隊開發(fā)吞歼,可以將fix bug分支與其他團隊最近要上線的分支集成,然后集成測試再上線塔猾。
?    測試Bug:根據(jù)測試所反饋的bug描述篙骡,若語義不清晰,則直接找到提bug人丈甸,操作給開發(fā)人員看糯俗,最好是可以bug復現(xiàn)。解決bug時睦擂,若能根據(jù)描述直接定位bug出錯之處叶骨,則好處理;若無法直觀定位祈匙,則根據(jù)bug類型分幾種處理方式,比如崩潰的bug可以通過instruments來檢測天揖、數(shù)據(jù)顯示錯誤的bug夺欲,則需要閱讀代碼一步步查看邏輯哪里寫錯。
對于開發(fā)中出現(xiàn)的崩潰或者數(shù)據(jù)顯示不正常今膊,那就需要根據(jù)經(jīng)驗或者相關(guān)工具來檢測可能出錯之處些阅。當然,團隊內(nèi)溝通解決是最好的斑唬。

<h1>9市埋、你一般是怎么用 Instruments 的黎泣?</h1>

這個問題也就是考察下你經(jīng)驗如何了, Instruments里面工具很多,也沒必要逐一說明,挑幾個常用的說下就好
參考答案:

Time Profiler:性能分析
Zombies:檢查是否訪問了僵尸對象,但是這個工具只能從上往下檢查,不智能
Allocations:用來檢查內(nèi)存,寫算法的那批人也用這個來檢查
Leaks:檢查內(nèi)存,看是否有內(nèi)存泄露

<h1>10、你一般是如何調(diào)試 Bug 的缤谎?</h1>

查看異常報告
配置相關(guān)環(huán)境抒倚,重現(xiàn)bug
代碼檢查
用測試案例來捕獲bug
可以請同事一同來審查問題,有些時候當局者迷坷澡,旁觀者清托呕。

<h1>11、如何對iOS設(shè)備進行性能測試?</h1>

Profile-> Instruments ->Time Profiler 進行性能測試频敛!

測試iOS版的 App 注意事項分享以下幾點:

1.app使用過程中项郊,接聽電話≌遄可以測試不同的通話時間的長短着降,對于通話結(jié)束后,原先打開的app的響應拗军,比如是否停留在原先界面任洞,繼續(xù)操作時的相應速度等。

2.app使用過程中食绿,有推送消息時侈咕,對app的使用影響

3.設(shè)備在充電時,app的響應以及操作流暢度

4.設(shè)備在不同電量時(低于10%器紧,50%耀销,95%),app的響應以及操作流暢度

5.意外斷電時铲汪,app數(shù)據(jù)丟失情況

6.網(wǎng)絡環(huán)境變化時熊尉,app的應對情況如何:是否有適當提示?從有網(wǎng)絡環(huán)境到無網(wǎng)絡環(huán)境時,app的反饋如何?從無網(wǎng)絡環(huán)境回到有網(wǎng)絡環(huán)境時掌腰,是否能自動加載數(shù)據(jù)狰住,多久才能開始加載數(shù)據(jù)

7.多點觸摸的情況

8.跟其他app之間互相切換時的響應

9.進程關(guān)閉再重新打開的反饋

10.IOS系統(tǒng)語言環(huán)境變化時
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市齿梁,隨后出現(xiàn)的幾起案子催植,更是在濱河造成了極大的恐慌,老刑警劉巖勺择,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件创南,死亡現(xiàn)場離奇詭異,居然都是意外死亡省核,警方通過查閱死者的電腦和手機稿辙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來气忠,“玉大人邻储,你說我怎么就攤上這事赋咽。” “怎么了吨娜?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵脓匿,是天一觀的道長。 經(jīng)常有香客問我萌壳,道長亦镶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任袱瓮,我火速辦了婚禮缤骨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尺借。我一直安慰自己绊起,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布燎斩。 她就那樣靜靜地躺著虱歪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栅表。 梳的紋絲不亂的頭發(fā)上笋鄙,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音怪瓶,去河邊找鬼萧落。 笑死,一個胖子當著我的面吹牛洗贰,可吹牛的內(nèi)容都是我干的找岖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼敛滋,長吁一口氣:“原來是場噩夢啊……” “哼许布!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绎晃,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜜唾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后庶艾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袁余,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年落竹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片货抄。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡述召,死狀恐怖朱转,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情积暖,我是刑警寧澤藤为,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站夺刑,受9級特大地震影響缅疟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遍愿,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一存淫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沼填,春花似錦桅咆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至薛夜,卻和暖如春籍茧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梯澜。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工寞冯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腊徙。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓简十,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撬腾。 傳聞我的和親對象是個殘疾皇子螟蝙,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容