精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS SDK:iOS調試技巧

移動開發 iOS
Xcode底部的小黑盒是我們調試時的好朋友,它可以輸出日志信息、錯誤信息以及其他有用的東西來幫你跟蹤錯誤,除了可以看到日志直接輸出的信息外,我們編程過程中也可以在某些斷點停留,來檢查app的多個方面。

為什么你的數組包含3個項目而不是5個?為什么你的游戲運行緩慢?這些都跟調試有關,調試是開發過程中必不可少的一部分。本文所列舉了一些重要的調試功能(當然并不全面)可以幫你用更少的時間來解決bug問題。

本文內容主要包括3個方面:

使用console檢查app狀態

進行日志記錄,并熟練的駕馭NSLog

使用對象的生命周期來跟蹤內存的使用。

使用Console檢查app狀態

Xcode底部的小黑盒是我們調試時的好朋友,它可以輸出日志信息、錯誤信息以及其他有用的東西來幫你跟蹤錯誤,除了可以看到日志直接輸出的信息外,我們編程過程中也可以在某些斷點停留,來檢查app的多個方面。

條件斷點

我假定你知道Breakpoints是如何工作的(如果你不知道,呵呵,看完這個文章也許你就知道了!)

讓程序在某個特定的時間點命中斷點非常有價值,但要通過一個循環或者遞歸函數才能讓對象等于某個確定的值,是一件令人痛苦的事情。這時候我們可以使用條件斷點!

條件斷點就是帶有條件表達式的斷點,只有滿足這個條件,程序才會暫停。假想我們只想在對象處于特定狀態的時候斷點,或者在第N次迭代循環時命中斷點。

點擊Xcode editor的‘gutter’來添加斷點,右鍵點擊斷點,然后選擇“edit breakpoint”來設置特定條件。

條件斷點只有在遇到特定情況時才會中斷,你可以提供給一個條件(比如i == 12),或者斷點應該忽略的次數。另外,你還可以添加能根據斷點自動發生的動作,例如一個debugger command---打印一個值。

提示:添加/刪除斷點的鍵盤快捷鍵是command+\

另外一個重要的斷點技巧是添加一個異常斷點(exception breakpoint)。當遇到異常時, Xcode基本上都會自動轉到main方法的autorelease pool中。

通過設置異常斷點,你可以定位到引起異常斷點的具體代碼行。

如何添加異常斷點?

1.打開異常斷點tab(command+6);2.選擇窗口左下角的”+”按鈕;3.選擇按鈕并添加‘exception breakpoint’。

這樣,當Xcode遇到異常情況時,將會在引起異常代碼的地方發生斷點。

從Console進行手動打印

理論上說,它會展示當前環境中所有值的狀態;實際上,有時候會出現bug,并且不會列出值或者當你單步調試的時候不進行更新。

一般情況下,我們在app代碼中添加特定斷點,是為了通過Xcode提供的‘variables view’(該view在Xcode底部console旁邊)來查看對象的狀態 。理論上說,它可以顯示出與當前上下文相關的所有值的狀態。實際上,有時候會有點小問題,不會列出相關的值或者不會進行相關的更新。

不過,我們可以使用一些有用的console命令來檢查特定的對象。在console中輸入‘po’就可以獲得某個斷點的即時信息。(處理scalar值時,我們可以使用‘p’)

在我們查看一個已存在的對象時,這一點非常有用(如果對象不存在的話會打印出nil),確定對象的值,找出數組/字典運行時的信息,甚至是比較兩個對象。因為這個指令打印出相關對象的內存地址,所以你可以打印你認為應該一樣的兩個對象,看看它們的內存地址是否相同。

另一個有用的,但是被隱藏的指令是recursiveDescription,你可以簡單地用它對view進行檢查。

在view中調用recursiveDescription來打印它的繼承關系。

有效的Logging

有時,在調試程序的某個特定時間,我們希望將消息打印到控制臺,此時‘NSLog’函數允許我們將任意輸出打印至console。

此時可以使用NSLog函數,通過該函數可以將任意的輸出打印到控制臺。在不使用斷點時,這個功能非常有用。NSLog遵從的格式與[NSString StringWithFormat]方法遵從的格式一樣。(你可以從下邊的截圖中看到)

Tip: 這里可以看到蘋果關于Objective-C中字符串格式化的信息: String Programming Guide

NSLog 

NSLog非常有用,我們需要聰明地實現它。從NSLog打印出的任何東西都會變成代碼,任何人都可以看見。將設備連接到電腦,打開XCode 中的organiser,就可以從console查看到每條日志信息,這會帶來很大的影響。想一下,你想把一些保密的算法邏輯或者用戶密碼打印到 console。正因為這個,如果蘋果發現在production build中,有太多內容輸出到console,那么你的應用可能會遭到蘋果的拒絕。

幸運的是,這里有一個最簡單的辦法進行log——通過一個宏,讓NSLog只在debug build的時候起作用。將這個功能添加到全局都能訪問得到的頭文件中。這樣你就可以盡情的使用log了,并且當進行production時,不會包含log相關代碼。如下代碼:

  1. #ifdef DEBUG 
  2. #define DMLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__]) 
  3. #else 
  4. #define DMLog(...) do { } while (0) 

如果你使用DMLog,那么它只能在debug build期間打印。__PRETTY_FUNCTION__ 也可以幫忙打印出log所在的函數的名稱。

下一步

NSLog 很強大,但也有不少限制:

1. 只能本地打印

2. 不支持分級別的log(比如是危險還是警告)

3. NSLog非常慢,大量處理時會明顯降低程序的運行效率。

推薦兩個框架,可以避免NSLog一些限制:

Cocoa LumberJack –眾所周知的通用的Cocoa日志框架之一,學習起來有點難度,但是非常強大。

SNLog –NSLog的替代品。

跟蹤對象的生命周期

盡管Automatic Reference Counting (ARC)已經讓內存管理變得簡單、省時和高效,但是在object的life-cycles中跟蹤一些重要事件依然十分重要。畢竟ARC并沒有完全排除 內存泄露的可能性,或者試圖訪問一個被release的對象。為了這個目的,我們可以用一些處理方法和工具來幫助我們盯著對象正在做些什么。

LOG重要事件

Objective-C 對象的 life-cycle中有兩個很重要的方法: init 和dealloc ,將這兩個方法調用的事件log到console是不錯的選擇——你可以通過控制臺觀察到對象生命的開始,更重要的是,可以確保對象的釋放。

  1. - (id)init 
  2.     self = [super init]; 
  3.     if (self) 
  4.     { 
  5.         NSLog(@"%@: %@", NSStringFromSelector(_cmd), self); 
  6.     } 
  7.     return self; 
  8. - (void)dealloc 
  9.     NSLog(@"%@: %@", NSStringFromSelector(_cmd), self); 

靜態分析器和Inspector(檢查器)

Xcode中還有兩個工具可以幫我們清理代碼,減少代碼出錯的幾率。對Xcode而言,靜態分析器工具是一個非常棒用來改善代碼的工具。比如檢 測出沒有使用過的對象,沒有release對象(針對Core Foundation對象,ARC仍然會有這樣的問題)。通過選擇Product菜單中的‘Anlayze’可以查看到相關建議。

檢查器是非常強大的一組工具,通過檢查器不僅可以從不同的角度檢查程序對內存的使用情況,文件系統的使用情況(增加、刪除、修改等),甚至還提供了自動UI交互的方法。通過選擇Product菜單中的‘Profile’可以查看到這些檢查器。

選擇‘Profile’會打開一個Instrument窗口,這里可以選擇一個配置模板進行運行。最常用的模板有zombies(稍后會討論),activity monitor和leaks。在程序運行時,對內存泄露進行捕捉時,Leaks可能是最有用的一個模板。

Zombies是你的朋友

雖然在有ARC的地方很難再遇到讓人難受的EXC_BAD_ACCESS錯誤了,但是在某些確定的情況下,該錯誤還是會發生的。當在處理 UIPopoverController或者core foundation對象時,我們可以訪問一個已經被release掉的對象。一般,當我們release內存中的一個對象時,該對象將被銷毀。但是,當 Zombies開啟時,只是將對象標記為release,實際上該對象還停留在內存中。當我們訪問一個Zombie對象時,Xcode可以告訴我們正在訪 問的對象是一個不應該存在的對象了。因為Xcode知道這個對象是什么,所以可以讓我們知道這個對象在哪里,以及這是什么時候發生的。

這里有兩種方法可以查找出Zombies對象。使用檢查器中的Zombie配置模板,或者在‘Run’ build選項中開啟Zombie診斷選項。在Stop按鈕的旁邊,點擊scheme名稱,然后選擇‘Edit Scheme’,點擊diagnostic tab項,并勾選上‘Enable Zombie Objects’。注意,Zombie只能用在模擬器調試中,真機上不能使用。

注意,Zombie模式調試僅適用于模擬器,不能在真實設備上使用。

總結

希望以上內容能給你幫你更高效地調試你的app,所有這些都是為了能都節省bug修復時間,這樣開發者就能把時間花在更重要的事情上,或者打造一款偉大的應用程序。

上邊列出的肯定不是一個全面的列表,還有很多我們沒有討論的方法,比如遠程遙控bug報告,崩潰報告以及更多。也希望你能分享更多。

責任編輯:閆佳明 來源: cocoachina
相關推薦

2016-03-01 14:37:38

iOSLLDB調試技巧

2017-01-19 19:20:35

iOS調試小技能

2019-04-18 09:31:07

iOS項目開發斷點代碼

2013-06-20 11:04:46

iOS技巧NotificatioBadgeView

2018-10-16 15:08:20

屏幕圖像對象

2013-05-30 15:44:45

iOS開發iOS SDKUITextView

2019-04-26 06:58:56

iOSLLDBXcode

2019-04-12 08:10:33

iOS靜態分析Xcode

2010-08-10 12:55:42

思科IOS備份恢復

2013-04-11 16:08:50

iOS開發技巧積累

2009-02-26 09:59:00

IOS軟件思科路由器

2013-01-16 08:56:53

iOS故障排除指南

2011-07-22 10:01:58

IOS SDK Twitter

2011-08-16 15:17:44

IOS SDK

2013-05-28 16:44:24

iOS開發iOS SDK預覽文檔

2015-08-27 11:16:14

ios開發技巧

2010-08-05 14:16:37

路由器配置

2011-07-06 13:45:58

iOS SDK

2011-08-18 11:19:13

IOS開發Core Plot S

2013-05-30 15:53:17

iOS開發iOS SDKPopver
點贊
收藏

51CTO技術棧公眾號

黄色av免费在线播放| 国产亚洲一区在线播放| 黑人操日本美女| 国产一区二区三区不卡av| 狠狠色狠狠色综合日日小说| 小说区图片区图片区另类灬| www.国产麻豆| 日韩福利电影在线| 欧美国产日韩一区二区三区| 美女被到爽高潮视频| 91精品短视频| 欧美色手机在线观看| 日韩精品在线视频免费观看| a天堂中文在线| 国产精品一区二区三区四区| 国产成人精品在线观看| 国产在线观看成人| 成人国产精品一级毛片视频| 欧美白人最猛性xxxxx69交| jizz欧美激情18| 黄网站在线播放| 久久婷婷成人综合色| 亚洲自拍偷拍区| 中文字幕日本人妻久久久免费| 亚洲欧洲一区二区天堂久久| xvideos亚洲| 国产在线综合视频| 欧美成a人免费观看久久| 91精品国产综合久久精品| 免费日韩视频在线观看| 不卡一本毛片| 一区二区不卡在线播放 | 国产日韩欧美成人| www.av麻豆| 激情婷婷久久| 欧美精品在线视频观看| 三级黄色片在线观看| 自拍自偷一区二区三区| 亚洲精品一区二区三区影院| 337p日本欧洲亚洲大胆张筱雨 | 亚洲最大福利网站| 91丨porny丨在线中文 | 美女精品导航| 一级日本不卡的影视| 免费观看黄色大片| 国产网友自拍视频导航网站在线观看 | 欧美在线观看在线观看| jvid福利写真一区二区三区| 北条麻妃高清一区| 亚洲第九十九页| 国产成人午夜99999| 亚洲精品女av网站| www.天天干.com| 国产69精品久久久久777| 99精品国产高清一区二区| av中文字幕播放| 国产精品综合二区| 国产高清精品一区二区| 免费看av毛片| 久久综合色之久久综合| 欧美一区二区在线| 国产69精品久久app免费版| 亚洲国产精品99久久久久久久久| 亚洲国产日韩综合一区| 嫩草香蕉在线91一二三区| 亚洲视频一区二区在线| 成人短视频在线观看免费| 欧美videosex性欧美黑吊| 午夜精品成人在线| 国产一级片黄色| 最新日韩一区| 欧美一区二区二区| 亚洲香蕉中文网| 婷婷综合一区| 色综合伊人色综合网站| 中文字幕在线有码| 99精品视频免费观看| 国产精品av在线播放| 96亚洲精品久久久蜜桃| 国产a级毛片一区| 乱色588欧美| 国产原厂视频在线观看| 精品久久久久久久久久久久久久| av五月天在线| 伊人久久亚洲| 国产午夜精品美女视频明星a级| 欧美成人久久久免费播放| 欧美性色综合| 国产成人av网| 亚洲成人黄色片| 国产午夜精品一区二区三区视频| 一区精品在线| 午夜久久中文| 91精品福利在线一区二区三区 | 成人av一区二区三区在线观看 | 99自拍偷拍视频| 韩日精品视频| 国产精品久久久久7777婷婷| 亚洲精品国产suv一区| 懂色av一区二区三区蜜臀| 欧美另类网站| 欧美色图天堂| 欧美精品久久久久久久多人混战| 欧美精品欧美极品欧美激情| 999国产精品永久免费视频app| 97热在线精品视频在线观看| 国产美女www爽爽爽视频| 久久亚洲私人国产精品va媚药| 最近免费观看高清韩国日本大全| xxxxxx欧美| 欧美va日韩va| 国产精品国产三级国产传播| 美女被久久久| 国产区欧美区日韩区| 黄色网址视频在线观看| 欧美无乱码久久久免费午夜一区| 日韩av在线免费观看一区| 成年人看的毛片| 日韩毛片免费看| 日韩精品视频中文在线观看| 国产成人久久久久| 蜜桃精品视频在线| 欧美裸体网站| √天堂8资源中文在线| 欧美一级免费观看| 永久av免费网站| 日韩精品国产欧美| 欧美精品七区| 国产精选在线| 亚洲精品在线观看视频| 九九热视频精品| 国产一区二区三区高清播放| 亚洲一区在线直播| 成人免费一区| 在线观看久久av| 成人免费毛片男人用品| 久久亚洲综合色一区二区三区 | 丝袜国产日韩另类美女| 久久爱av电影| 免费h视频在线观看| 亚洲第一精品夜夜躁人人爽 | 亚洲s色大片| 欧美午夜理伦三级在线观看| 日韩女同一区二区三区| 日韩在线观看一区二区| 日韩亚洲视频在线| 欧美日一区二区三区| 中文字幕在线成人| 亚洲在线精品视频| 中文字幕视频一区二区三区久| 亚洲视频第二页| 91精品一区国产高清在线gif| 91在线视频一区| 日本美女在线中文版| 欧美日本视频在线| 黄页网站免费观看| 成人福利视频在线| 欧美视频在线播放一区| 国产精品一区二区av交换| 国产精品免费一区| 黄视频网站在线| 日韩欧美国产综合在线一区二区三区| 日本妇女毛茸茸| 国产不卡视频一区| 国产真人做爰毛片视频直播| 日韩高清成人在线| 国产精品久久久久久久app| 色三级在线观看| 精品少妇一区二区三区日产乱码| 日本天堂网在线观看| 26uuu国产电影一区二区| 亚洲乱码国产一区三区| 久久久久久久久99精品大| 波多野结衣久草一区| 欧美男男tv网站在线播放| 亚洲欧美综合另类中字| 91精品国产乱码久久| 亚洲综合色自拍一区| 亚洲天堂资源在线| 久久精品国产成人一区二区三区| 欧美一级特黄aaaaaa在线看片| 国产精品一区二区三区美女| 欧日韩不卡在线视频| 免费av毛片在线看| 亚洲成人久久网| 波多野结衣黄色网址| 亚洲欧美激情一区二区| 黄色a一级视频| 韩国三级中文字幕hd久久精品| 青青青青草视频| 欧美丰满日韩| 精品国产福利| 成人国产精品久久| 青青在线视频一区二区三区| 成年人网站在线| 亚洲欧美另类自拍| 亚洲高清视频网站| 欧美三级乱人伦电影| 日韩成人在线免费视频| 亚洲日本中文字幕区| 在线观看福利片| 懂色av一区二区三区蜜臀| 中文字幕第100页| 久久大逼视频| 男人天堂手机在线视频| 99精品电影| 青娱乐国产91| 精品淫伦v久久水蜜桃| 成人激情春色网| 午夜激情成人网| 2019中文字幕在线| 日韩av毛片| 久久激情视频免费观看| 国内精品在线视频| 亚洲精品wwwww| www.麻豆av| 日韩午夜电影在线观看| 在线观看中文字幕av| 一本色道a无线码一区v| 黄色一级片免费看| 亚洲第一av色| 精品一区二区三区四| 亚洲欧洲综合另类在线| 精品一区二区6| 99久久亚洲精品蜜臀| 欧美一区二区高清| 亚洲中文字幕一区二区| 91国产丝袜在线播放| 久久亚洲天堂网| 五月天久久比比资源色| xxxx 国产| 一区二区三区四区在线播放| 五月综合色婷婷| 中文字幕在线一区二区三区| 在线观看免费小视频| 国产网红主播福利一区二区| 中文人妻一区二区三区| 91一区二区三区在线播放| av电影在线播放| av高清久久久| 亚洲av成人片色在线观看高潮| 成人性生交大片免费看中文网站| 亚洲熟妇一区二区| 国产91丝袜在线18| 国产白袜脚足j棉袜在线观看 | 捆绑裸体绳奴bdsm亚洲| 成人禁用看黄a在线| 天天躁日日躁狠狠躁av| 成人看片黄a免费看在线| 无码国产69精品久久久久网站| 成人免费毛片app| 国产精品九九视频| 成人av在线资源网站| 亚洲欧美视频在线播放| 久久精品一区蜜桃臀影院| 变态另类ts人妖一区二区| 欧美国产一区二区在线观看| 久久午夜精品视频| 日韩毛片精品高清免费| 少妇久久久久久被弄高潮| 亚洲在线观看免费视频| 亚欧视频在线观看| 欧美性生活影院| 国产精品久久久久久免费播放 | 亚洲AV成人精品| 成年人午夜久久久| 中文字幕一区二区人妻在线不卡| 国产亚洲精品精华液| 懂色av粉嫩av蜜臀av一区二区三区| 亚洲日本丝袜连裤袜办公室| 精品处破女学生| 色呦呦国产精品| 国产精品久久久久久久久久久久久久久久 | 乱亲女h秽乱长久久久| 欧美精品一区二区三区在线四季 | 亚洲 欧美 综合 另类 中字| 国产一区二区三区成人欧美日韩在线观看 | 污污的网站在线看| 4p变态网欧美系列| 国产精品伦一区二区| 成人免费视频网站| 国产欧美日韩精品一区二区免费| 咪咪色在线视频| 夜夜爽av福利精品导航| 国产又大又黄又粗的视频| 国产精品一级在线| 女人又爽又黄免费女仆| 亚洲免费在线播放| 久久久久女人精品毛片九一| 欧美日韩国产高清一区二区三区| 免费观看成年人视频| 久久久久久久久久久久久久久久久久 | 中文字幕一区二区三区5566| 亚洲午夜一级| 日本肉体xxxx裸体xxx免费| 丁香婷婷综合五月| 亚洲 欧美 国产 另类| 午夜av区久久| 国产精品久久久久毛片| 亚洲免费视频一区二区| a级毛片免费观看在线| 国产成人精品久久亚洲高清不卡| 视频一区中文字幕精品| 午夜精品短视频| 国产精品一页| 无码人妻久久一区二区三区蜜桃 | 亚洲欧洲日夜超级视频| 亚洲毛片网站| 性高潮久久久久久| 国产精品久久久久久久久快鸭| 91久久国产视频| 精品久久久久久久一区二区蜜臀| av在线播放免费| 欧洲亚洲在线视频| 成人午夜网址| 国产日产欧美一区二区| 日本欧美一区二区| 3d动漫精品啪啪一区二区下载| 亚洲自拍偷拍麻豆| 国产精品久久免费| 久久精品中文字幕一区| 国产精品99| 日韩美女一区| 久久久久久婷| 亚洲做受高潮无遮挡| 亚洲成av人片在www色猫咪| 性中国古装videossex| 精品国产一区二区三区在线观看 | 884aa四虎影成人精品一区| 国产色在线 com| 欧洲s码亚洲m码精品一区| 欧美日韩导航| 我的公把我弄高潮了视频| 成人深夜福利app| 精品无码免费视频| 欧美成人女星排行榜| 色网在线观看| 97se亚洲综合| 国产字幕视频一区二区| 在线播放av网址| 亚洲国产视频一区| 亚洲产国偷v产偷v自拍涩爱| 欧美黑人性视频| 亚洲综合影院| 久久久久久免费看| 91在线观看一区二区| 91视频免费网址| 亚洲欧美日韩第一区| 精品日韩视频| 伊人婷婷久久| 国产伦精品一区二区三区在线观看 | 在线视频亚洲专区| 国产自偷自偷免费一区 | 成人涩涩免费视频| 日韩久久久久久久久| 国产视频欧美视频| 日本精品网站| 在线一区亚洲| 成人小视频免费观看| 91精品国产乱码久久久张津瑜| 亚洲毛片在线看| 成人国产一区| av一区二区三区免费观看| 91在线高清观看| 免费一级a毛片| 久久久91精品国产| 国产乱人伦精品一区| av免费在线播放网站| 中文字幕一区在线| 亚洲不卡免费视频| 国产成人精品综合| 欧美一区亚洲| 超碰97人人干| 91精品综合久久久久久| 第一av在线| 五月天国产一区| 成人一二三区视频| 老熟妇一区二区三区啪啪| 欧美成年人在线观看| 亚洲国产最新| 一级黄色高清视频| 欧美性xxxxxxxxx| 国产激情小视频在线| 美女精品国产| 激情五月激情综合网| 日韩污视频在线观看| 日韩中文字幕免费| 精品久久ai| 看看黄色一级片| 欧美日韩免费观看中文| 蜜芽在线免费观看| 久久久久久九九| 国产精品影视在线| 精人妻无码一区二区三区| 欧美精品免费播放| 清纯唯美综合亚洲| 特级西西人体4444xxxx| 欧美一级理论片| 国产91亚洲精品久久久| 日韩中文字幕在线视频观看 |