iOS Xcode調(diào)試技巧總結(jié)

劍未配好,出門已是江湖包吝。

? ? ? 最近一直沒有更新簡書是因?yàn)樵陂_發(fā)和測試階段,有任務(wù)源葫,沒有進(jìn)行學(xué)習(xí)诗越,不過在做任務(wù)的時(shí)候也遇到了一些技術(shù)點(diǎn),在這里總結(jié)一下息堂。

? ? ? 今天我們來談一談?Xcode調(diào)試的技巧嚷狞。?就像玩游戲,有些玩家他們知道怎么操作荣堰,會(huì)放技能會(huì)走路床未,但是他們不知道買裝備,玩了一局下來振坚,鞋子小刀都沒有買薇搁,這樣行走江湖很危險(xiǎn)啊渡八!所以我們出門要把裝配佩戴好啃洋,學(xué)會(huì)裝備自己才是王道传货!

? ? ? 本文將簡書和各大博客上邊涉及該方面的內(nèi)容進(jìn)行匯總,并試圖進(jìn)行全方位的總結(jié)宏娄,如果有什么不足之處還希望大家給提出來问裕,我會(huì)進(jìn)行補(bǔ)充和修改。現(xiàn)在我們開始吧孵坚。

? ? ? ?總體看來粮宛,關(guān)于調(diào)試的方法包括以下幾個(gè):?日志輸出&LLDB、斷點(diǎn)十饥、性能窟勃、一些小技巧等幾個(gè)大的方面。我們一一進(jìn)行學(xué)習(xí)和總結(jié)逗堵。

? ? ? ?嘗試接受新鮮事物和方法秉氧,方法都是熟能生巧的,各種方法綜合運(yùn)用蜒秤,用好了會(huì)事半功倍汁咏。

1、?日志輸出&LLDB

? ? ? ?關(guān)于日志輸出作媚,我們最先想到的是NSLog攘滩,但是弊端在于我們需要在想要打印的位置添加NSLog代碼并重新運(yùn)行項(xiàng)目,這樣耽誤時(shí)間纸泡,所以我們平時(shí)用的比較多的是打斷點(diǎn)漂问,然后po一下。這個(gè)“po”就是LLDB里面的一句命令女揭。

? ? ? ?那么蚤假,什么是LLDB呢:它是一個(gè)有著 REPL 的特性和 C++ ,Python 插件的開源調(diào)試器。LLDB 綁定在 Xcode 內(nèi)部吧兔,存在于主窗口底部的控制臺(tái)中磷仰。調(diào)試器允許你在程序運(yùn)行的特定時(shí)暫停它,你可以查看變量的值境蔼,執(zhí)行自定的指令灶平,并且按照你所認(rèn)為合適的步驟來操作程序的進(jìn)展。我們可以簡單的理解成它是一個(gè)調(diào)試器箍土。

? ? (1)LLDB命令行

? ? ? ?像下圖中逢享,我們打斷點(diǎn)后,控制臺(tái)右邊里面會(huì)出現(xiàn)一個(gè)“l(fā)ldb”吴藻,我們平時(shí)不怎么關(guān)注它拼苍,但我們一直在使用它。

? ? ? <1> ?help命令

? ? ? 斷點(diǎn)的時(shí)候,我們在控制臺(tái)右邊lldb后邊輸入一個(gè)“help”疮鲫,然后敲回車吆你,就會(huì)看到所有關(guān)于lldb的命令以及各自的介紹,如下圖:

? ? ? <2> ?print命令

? ? ? ?print很好理解俊犯,就是打印妇多,使用過程中我們可以直接用p來代替print。

? ? ? ?<3> ?expression命令

? ? ? ? 該命令可以改變程序?qū)嶋H參數(shù)的值燕侠,目的是方便了調(diào)試:不用重新運(yùn)行項(xiàng)目者祖。例如下圖中,我們簡單的做一個(gè)測試绢彤,令蘋果=1七问,橘子=2,all應(yīng)該=3茫舶,在斷點(diǎn)過程中械巡,我們用expression命令修改了橘子的值,令橘子=5饶氏,結(jié)果再打印all的時(shí)候讥耗,all=6(親測好使)。使用過程中我們可以直接用 expr來代替expression疹启。

? ? ? ? 這里我們注意到一個(gè)“$9”古程,這里的9是我們使用lldb命令的次數(shù),例如下圖喊崖,我們expression一次橘子挣磨,po了一次all,再print橘子的時(shí)候荤懂,顯示的是“$11”趋急,說明我們print命令是$10。這個(gè)不用管势誊,只是提醒我們一下而已,作用應(yīng)該不是很大谣蠢。

? ? ? ?<4> ?po命令

? ? ? ? 現(xiàn)在我們來看看平時(shí)用的比較多的“po”粟耻,它是“print object”的簡寫。po一下眉踱,我們就可以看到對象的詳細(xì)信息挤忙。po使用的比較多,使用起來也比較簡單谈喳、方便册烈,這里不做多余的介紹。

? ? ? ? <5> ?image命令

image list 查看工程中使用的庫

image lookup --address? 0x000000010e0979ac ?程序崩潰的時(shí)候定位,查看具體報(bào)錯(cuò)位置

? ? ? ?這個(gè)其實(shí)我們可以想辦法用在我們崩潰日志的收集里面赏僧,這樣的話我們就可以直接定位到崩潰信息的具體位置了大猛。(親測,不好使淀零。感覺xcode反饋的崩潰信息不準(zhǔn)確挽绩。)

? ? ? ?<6> ?call命令

? ? ? ? call即調(diào)用的意思。上述的po和p也有調(diào)用的功能驾中。所以一般只在不需要顯示輸出唉堪,或方法無返回值的時(shí)候使用call。 和上面的命令一樣肩民,我們依然在viewDidLoad:里面設(shè)置斷點(diǎn)唠亚,然后在程序中斷的時(shí)候輸入下面的命令:

call ?[self.view setBackgroundColor:[UIColor redColor]]

? ? ? ? 繼續(xù)運(yùn)行程序,看看view的背景顏色是不是變成紅色的了持痰!在調(diào)試的時(shí)候靈活運(yùn)用call命令可以起到事半功倍的作用(親測好使)灶搜。

(2)LLDB調(diào)試欄

? ? ? 一般的按鈕和功能我們用的比較多,也比較熟悉共啃,這里我們著重介紹一下Debug View Hierachy和xcode8新增的memory graph功能占调。

? ? ? <1>Debug View Hierachy

? ? ? ?Debug View Hierachy,翻譯過來就是:調(diào)試視圖層次移剪。除了點(diǎn)擊控制臺(tái)出的圖標(biāo)究珊,也可以從菜單中選擇Debug > View Debugging > Capture View Hierarchy 來啟動(dòng)視圖調(diào)試。(我們可以看出xcode開發(fā)人員的用心之處:重疊在一起的長方形纵苛,我們大概就明白這個(gè)按鈕是表示層級關(guān)系的)在斷點(diǎn)或者不是斷點(diǎn)的情況下都可以通過點(diǎn)擊這個(gè)按鈕查看視圖層級關(guān)系剿涮。點(diǎn)擊按鈕,我們會(huì)在xcode最頂端的地方看到下圖的一個(gè)信息:

? ? ? ?capture user interface for YourAppName:capture是捕獲的意思攻人,interface取试,face我們知道是臉,inter是進(jìn)入的意思怀吻,interface就是進(jìn)入臉瞬浓,我們大概能夠明白這句話的意思就是“為你的app捕獲用戶交界面”。

從左到右控件排序:(上圖中也簡單解釋了各個(gè)功能)

調(diào)整視圖間距:調(diào)整不同視圖間的間距蓬坡。

展示被剪切的內(nèi)容:當(dāng)前展示視圖中被剪切的部分猿棉。

展示約束:展示選中視圖的約束。

重置查看區(qū)域:將3D渲染透視圖恢復(fù)至默認(rèn)狀態(tài)屑咳。

調(diào)整查看模式:選擇性地展示3D渲染透視圖萨赁,比如僅展示內(nèi)容,僅展示框架以及同時(shí)展示內(nèi)容和框架兆龙。

縮姓人:縮小3D渲染透視圖

恢復(fù):將3D渲染透視圖恢復(fù)至默認(rèn)尺寸。

放大:放大3D渲染透視圖

調(diào)整可視視圖范圍:隱藏視圖或展示視圖,一步步解析3D渲染視圖慰安,向左或者向右滑動(dòng)滑塊兒有相反的效果腋寨。

? ? ? ?有了這個(gè)圖層關(guān)系,我們可以很清楚的知道頁面上邊的各個(gè)控件的位置關(guān)系泻帮,因?yàn)槲覀冊陂_發(fā)階段?尤其是測試階段精置,某個(gè)控件上邊的字不顯示,或者控件的字被遮擋锣杂,我們可以用視圖調(diào)試器查看脂倦,是否控件是frame設(shè)置的不合理。

? ? ? ? <2>memory graph

? ? ? ? 【經(jīng)驗(yàn)1】

? ? ? ? 這個(gè)是xcode8新增的功能元莫,翻譯過來的意思就是:內(nèi)存圖赖阻。有了內(nèi)存圖我們就可以解決閉包引用循環(huán)問題了。舉個(gè)栗子踱蠢,我們寫個(gè)循環(huán)引用火欧,如下:

? ? ?(說實(shí)在的,這幾個(gè)命令我在終端不知道怎么調(diào)用茎截,試了半天苇侵,還是沒有搞出來,應(yīng)該就是內(nèi)存圖調(diào)試的樹狀結(jié)構(gòu)企锌。如果有誰在終端里面知道怎么搞出來榆浓,煩請告訴我一下具體怎么操作凛膏,謝謝了7尴睢)所以,這里我們直接看這個(gè)memory graph按鈕點(diǎn)擊后的效果吮旅。

? ? ? 【經(jīng)驗(yàn)2】? ?

? ? ? ?說明1:這個(gè)功能是xcode8新增的功能抖坪,那么xcode7上邊肯定找不到萍鲸!而xcode8還要10.11.5以上的系統(tǒng),所以擦俐,建議大家先把升級電腦系統(tǒng)脊阴,然后安裝xcode8。

? ? ? ?說明2: ?真機(jī)的話還需要iOS9或者10的系統(tǒng)蚯瞧。

? ? ? ?說明3:查找當(dāng)前默認(rèn)Xcode.app的developer路徑---終端命令行:xcode-select -p嘿期。

? ? ? ? ? ? ? ? ? ? 如果安裝了多個(gè)版本的xcode工具,可以使用xcode-select命令指定命令行指令使用哪個(gè)版本xcode下的developer目錄下的調(diào)試工具状知,即修改路徑:xcode-select --switch /Applications/Xcode2.app/Contents/Developer。

? ? ? 踩過的坑:

? ? ? <1>本來我用的是xcode7.2孽查,挺好用饥悴,結(jié)果在xcode7上邊顯然沒有這個(gè)按鈕,升級到xcode8吧。

? ? ? <2>同事airdrop傳來的xcode8.0和xcode8.1西设,結(jié)果提示安裝不上瓣铣,需要升級電腦的系統(tǒng)。

? ? ? <3>升級好了系統(tǒng)贷揽,安裝好了同事airdrop傳來的xcode8.0不顯示棠笑。(!準(zhǔn)備開始抓狂 ?G菪鳌)難道需要8.1才行蓖救?!

? ? ? <4>安裝好了同事airdrop傳來的xcode8.1印屁,依舊不顯示循捺。(!P廴恕从橘!抓狂!4∧啤G×Α)難道是?打開xcode時(shí)候的路徑不對?旗吁!

? ? ? <5>修改打開xcode的路徑為xcode8.1踩萎,依舊不顯示。(早已經(jīng)料到是這個(gè)結(jié)果了)難道是xcode安裝的太多了阵漏?驻民!

? ? ? <6>卸載掉xcode7.0.1、7.2履怯、7.3回还、8.0,只剩下一個(gè)8.1叹洲,依舊不顯示柠硕。(淡定的接受這個(gè)結(jié)果)難道是同事傳的xcode包有問題?运提!在App Store上自己下載;热帷!

? ? ? ? <7>?下載好了民泵,安裝好了癣丧,依舊不顯示。(?生無可戀了栈妆。胁编。厢钧。)

? ? ? ? 就在此時(shí),我不知道是被逼瘋了還是靈光一閃嬉橙,拿了同事的真機(jī)運(yùn)行項(xiàng)目早直,結(jié)果居然有了memory graph按鈕!J锌颉O佳铩!

當(dāng)你認(rèn)為最困難的時(shí)候枫振,恰恰也就是你最接近成功的時(shí)候喻圃!

當(dāng)你放棄的時(shí)候,你永遠(yuǎn)不會(huì)知道你離成功是那么的接近蒋得!

成功很簡單级及,就是在你堅(jiān)持不住的時(shí)候,再堅(jiān)持一下额衙!

所以建議使用memory graph功能之前確保:

升級電腦系統(tǒng)并安裝xcode8.1饮焦。(8.1比8.0更穩(wěn)定)(這里其實(shí)并不非得是App Store自己下載,別人用airdrop傳的也行)

真機(jī)iOS系統(tǒng)在9.0以上窍侧。

? ? ? 【經(jīng)驗(yàn)3】

? ? ? ?當(dāng)你點(diǎn)擊這個(gè)按鈕以后县踢,xcode上邊的狀態(tài)條會(huì)顯示下圖:

? ? ? ?Capturing memory graph for YourAppName:翻譯過來就是正在捕捉你的app內(nèi)存圖。

? ? ? ?來來來伟件,我們先來看看這狗東西......不是硼啤,是點(diǎn)擊后的效果圖??????

? ? ? 我想說,這是啥玩意斧账?谴返!

? ? 【經(jīng)驗(yàn)4】

? ? ?在解釋上邊圖結(jié)構(gòu)和各個(gè)圖標(biāo)表示的含義之前我們先來看看這幾個(gè)嘆號(hào)分別代表什么。

紅色嘆號(hào):這個(gè)最常見咧织,Error=錯(cuò)誤嗓袱。

黃色嘆號(hào):這個(gè)也常見,Warning=警告习绢。

紫色嘆號(hào):這個(gè)不常見渠抹,不過使用了memory graph我們就會(huì)經(jīng)常見到,Runtime Issue=運(yùn)行時(shí)問題闪萄。

藍(lán)色箭頭:這個(gè)是檢查內(nèi)存泄露是見到的梧却,靜態(tài)分析Command+Shift+B就可以看見。Static Analyzer Issue=靜態(tài)分析的問題败去。

紅色叉叉:這個(gè)實(shí)在instruments里面Leaked用法的時(shí)候見到過放航。UI Test Failed=UI測試失敗

在memory graph狀態(tài)下我們點(diǎn)擊左邊的嘆號(hào)圆裕,就會(huì)看到RunTime Issue:

? ? ? 【經(jīng)驗(yàn)5】

? ? ? ?在解決這個(gè)紫色嘆號(hào)之前我們先來看看右邊灰色三棱錐广鳍、藍(lán)色正方體缺菌、綠色圓圈等等都代表的是什么。

綠色的一般都是 UIKit 控件及其子類

藍(lán)色一般 NSObject 類及其子類

黃色一般都是容器類型及其子類

灰色括號(hào)是指 block

? ? ? 當(dāng)然還有很多一些其他的類型,具體的大家去看右上角的 Memory Inspect 界面就好,上面都會(huì)有詳細(xì)的信息搜锰。

? ? 【經(jīng)驗(yàn)6】

? ? ? 當(dāng)我們在某一個(gè)塊上邊點(diǎn)擊右鍵的時(shí)候,會(huì)彈出一個(gè)選項(xiàng)框耿战,里面有5個(gè)選項(xiàng):

Quick Look:快速查看蛋叼,和上圖中的小眼睛功能一樣。

Print Description:打印詳細(xì)信息剂陡,和上圖小眼睛右邊的按鈕功能一樣狈涮。

Jump To Definition:跳至代碼區(qū)。

Reveal in Debug Navigator:在左邊的內(nèi)存樹狀結(jié)構(gòu)中標(biāo)藍(lán)色鸭栖。

Focus on Node:在節(jié)點(diǎn)上關(guān)注歌馍,點(diǎn)擊后只剩下跟自己前后箭頭相關(guān)的節(jié)點(diǎn)node。

? ? ? ? 一開始進(jìn)入首頁的時(shí)候晕鹊,只展示tabbar上邊的四個(gè)controller松却。而當(dāng)我們想要看某個(gè)頁面的memory graph的時(shí)候,我們需要在真機(jī)上邊跳到那個(gè)頁面溅话,然后再點(diǎn)擊memory graph按鈕晓锻,才能在左邊的樹狀結(jié)構(gòu)中找到想要看的頁面的controller。

? ? ? 【經(jīng)驗(yàn)7】

? ? ? ? 和紅色飞几、黃色嘆號(hào)一樣砚哆,紫色嘆號(hào)出來了,我們就要想辦法解決掉屑墨,那么我們看看項(xiàng)目中的紫色嘆號(hào)都標(biāo)記在哪里了呢躁锁?

? ? ? ?各種Reachability啊B咽贰U阶!好不容易找到這個(gè)memory graph按鈕程腹,好不容易看明白點(diǎn)了內(nèi)存圖匣吊,好不容易找到了紫色嘆號(hào),你踏瑪?shù)赂嬖V我這個(gè)錯(cuò)誤是因?yàn)樘O果自己的Reachability造成的4缌省IА!(生無可戀见转。命雀。。斩箫。吏砂。撵儿。。狐血。淀歇。。匈织。浪默。。缀匕。纳决。。乡小。)紫著吧阔加。

2、斷點(diǎn)

斷點(diǎn)里面根據(jù)作用和功能也有很多種類:普通斷點(diǎn)满钟、條件斷點(diǎn)胜榔、異常斷點(diǎn)、符號(hào)斷點(diǎn)等湃番。我們一一學(xué)習(xí)介紹苗分。

(1)普通斷點(diǎn)(不帶技能就出去闖蕩江湖的)

? ? ? ? 當(dāng)程序運(yùn)行到斷點(diǎn)處時(shí)會(huì)暫停運(yùn)行。比如斷點(diǎn)打在11行牵辣,那么程序就會(huì)停在11行(注意:程序只運(yùn)行到了前10行摔癣,第11行其實(shí)還沒有被執(zhí)行。)纬向。只要在代碼行旁邊點(diǎn)擊择浊,就能添加一個(gè)斷點(diǎn),再次點(diǎn)擊逾条,斷點(diǎn)變成淺藍(lán)色琢岩,就能讓斷點(diǎn)不可用(disable了,仍然存在师脂,只是不起作用了)担孔。

(2)條件斷點(diǎn)(帶上技能再闖蕩江湖)

打上斷點(diǎn)之后,對斷點(diǎn)進(jìn)行編輯吃警,設(shè)置相應(yīng)過濾條件糕篇。單擊右鍵會(huì)彈出選項(xiàng)框:

Edit BreakPoint... :編輯斷點(diǎn)。

Disable? BreakPoint :斷點(diǎn)失效酌心。(相當(dāng)于上邊說到的單擊斷點(diǎn)變成淺藍(lán)色拌消,斷點(diǎn)失效)

Delete BreakPoint :刪除斷點(diǎn)。

Reveal in BreakPoint Navigator :在左邊的斷點(diǎn)樹狀結(jié)構(gòu)表明該斷點(diǎn)安券。

這里我們主要用到的是第一個(gè):Edit BreakPoint墩崩。這里面設(shè)置斷點(diǎn)的篩選條件(雙擊斷點(diǎn)也可以快速進(jìn)入編輯斷點(diǎn)的對話框)氓英。

【1】Condition:返回一個(gè)布爾值,當(dāng)布爾值為真觸發(fā)斷點(diǎn)鹦筹,一般里面我們可以寫一個(gè)表達(dá)式铝阐。

【2】Ignore: ? ? ?忽略前N次斷點(diǎn),到N+1次再觸發(fā)斷點(diǎn)铐拐。

【3】Action: ? ? ?斷點(diǎn)觸發(fā)事件饰迹,分為六種:

? ? ? ? ? ?<1> ?AppleScript:執(zhí)行腳本。

? ? ? ? ? ?<2> ?Capture GPU Frame:用于OpenGL ES調(diào)試余舶,捕獲斷點(diǎn)處GPU當(dāng)前繪制幀。?

? ? ? ? ? ?<3> ?Debugger Command:和控制臺(tái)中輸入LLDB調(diào)試命令一致锹淌。

? ? ? ? ? ?<4> ?Log Message:輸出自定義格式信息至控制臺(tái)匿值。

? ? ? ? ? ?<5> ?Shell Command:接收命令文件及相應(yīng)參數(shù)列表,Shell Command是異步執(zhí)行的赂摆,只有勾選“Wait until done”才會(huì)等待Shell命令執(zhí)行完在執(zhí)行調(diào)試挟憔。

? ? ? ? ? ? <6> ?Sound:斷點(diǎn)觸發(fā)時(shí)播放聲音。

【4】Options(Automatically continue after evaluating actions選項(xiàng)):選中后烟号,表示斷點(diǎn)不會(huì)終止程序的運(yùn)行绊谭。

【1】Condition:這里我設(shè)置i==6,我們看LLDB控制臺(tái)打印結(jié)果:

這里打印了0-5汪拥,然后斷點(diǎn)斷了达传。這樣做的目的就是我們不用在循環(huán)里面一個(gè)一個(gè)的點(diǎn)擊下一步,直接跳至我們想要看到的那一步迫筑。

【2】Ignore:這里我把Condition的條件取消宪赶,設(shè)置Ignor的條件為3,我們看LLDB控制臺(tái)打印結(jié)果:

結(jié)果是將0-2的循環(huán)直接忽略脯燃,而后邊的循環(huán)依舊每次在斷點(diǎn)的位置斷一次搂妻。

(3) ?異常斷點(diǎn)?Exception Breakpoint(全局?jǐn)帱c(diǎn))

? ? ? 異常斷點(diǎn)可以快速定位不滿足特定條件的異常,比如常見的數(shù)組越界辕棚,這時(shí)候很難通過異常信息定位到錯(cuò)誤所在位置欲主。這個(gè)時(shí)候異常斷點(diǎn)就可以發(fā)揮作用了。

? ? ?添加異常斷點(diǎn):

? ? ? ? 同樣的逝嚎,全局?jǐn)帱c(diǎn)也是可以編輯的扁瓢,單擊右鍵或者雙擊斷點(diǎn)就會(huì)彈出編輯框,編輯的項(xiàng)目和上述是一樣的补君。

(4)符號(hào)斷點(diǎn) Symbolic Breakpoint

? ? ? ? 符號(hào)斷點(diǎn)的創(chuàng)建也同異常斷點(diǎn)涤妒。一般符號(hào)斷點(diǎn)可以在你指定的[類名 方法名]時(shí)中斷執(zhí)行

3赚哗、性能檢測:


(1)靜態(tài)分析:通過對代碼靜態(tài)分析她紫,找出代碼潛在的錯(cuò)誤硅堆,如內(nèi)存泄漏、空引用贿讹、未使用函數(shù)等渐逃。

? ? ? ? ? ? ? ? 方法:菜單“Product"->"Analyze"或者Shift+Command+B,然后想辦法消滅藍(lán)箭頭民褂。

(2)動(dòng)態(tài)分析:通過Instruments工具跟蹤分析程序運(yùn)行時(shí)的數(shù)據(jù)

? ? ? ? ? ? ? ? 方法:參考《Instruments性能檢測

4茄菊、其他小技巧

? ? ? ?(1)模擬器調(diào)試:FPS

? ? ? ? 在《Instruments性能檢測》一文中我們就介紹了FPS=Frame Per Sencond:?一秒鐘渲染多少幀

? ? ? ? 根據(jù)蘋果全球開發(fā)者大會(huì)WWDC的說法赊堪,當(dāng)FPS低于45時(shí)面殖,用戶就會(huì)察覺滑動(dòng)有卡頓。

? ? ? ? 編譯并運(yùn)行應(yīng)用程序哭廉,選中模擬器脊僚,從 Debug菜單中選擇Color Blended Layers選項(xiàng)。

紅色:表示這些layer是透明的遵绰,系統(tǒng)在渲染這些像素點(diǎn)的時(shí)候辽幌,需要將該view及view一下的其他view混合之后才能得到實(shí)際的顏色。紅色越深椿访,表明系統(tǒng)在渲染的時(shí)候越費(fèi)勁乌企。

綠色:表示這些layer是不透明的,易于渲染成玫。

黃色:表示這里的點(diǎn)無法直接繪制在屏幕上加酵,此時(shí)系統(tǒng)需要對相鄰的像素點(diǎn)做反鋸齒計(jì)算,增加了圖形負(fù)擔(dān)哭当。產(chǎn)生的原因是這個(gè)控件的背景是通過圖片拉伸得到的虽画。

所以推薦盡可能地使用不透明的圖層。

? ? ? (2) 真機(jī)調(diào)試:截圖荣病。

? ? ? ?當(dāng)我們在模擬器上邊運(yùn)行項(xiàng)目的時(shí)候码撰,想要給產(chǎn)品或者測試人員看一下頁面效果如何,qq截圖就可以了个盆,如果在真機(jī)上呢怎么截圖呢脖岛?一般我們會(huì)拿著真機(jī)給產(chǎn)品或者測試人員看看,但是如果來回折騰很麻煩颊亮,我們也可以用自己的手機(jī)照相然后發(fā)圖片給他們柴梆,這里還有一個(gè)更好的辦法對真機(jī)進(jìn)行截圖:運(yùn)行項(xiàng)目,選擇Debug--View Debugging--Take Screenshot of 真機(jī)名字终惑,這樣在你的電腦桌面上邊就會(huì)有一張你的真機(jī)上邊選好頁面的截圖绍在。





參考:1、iOS各種調(diào)試技巧豪華套餐

? ? ? ? ? ?2、iOS調(diào)試之LLDB

? ? ? ? ? ?3偿渡、Xcode8調(diào)試黑科技:Memory Graph實(shí)戰(zhàn)解決閉包循環(huán)引用問題

? ? ? ? ? ?4臼寄、iOS開發(fā)之Xcode常用調(diào)試技巧總結(jié)

? ? ? ? ? ?5、Xcode8的Debug新特性---WWDC 2016 Session 410 & 412 學(xué)習(xí)筆記

? ? ? ? ? ?6溜宽、iOS 開發(fā)之個(gè)人調(diào)試技巧

最后吉拳,哪里不對的地方可以給我留言,我會(huì)及時(shí)改進(jìn)的适揉,謝謝大家留攒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嫉嘀,隨后出現(xiàn)的幾起案子炼邀,更是在濱河造成了極大的恐慌,老刑警劉巖剪侮,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拭宁,死亡現(xiàn)場離奇詭異,居然都是意外死亡票彪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門不狮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來降铸,“玉大人,你說我怎么就攤上這事摇零⊥频В” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵驻仅,是天一觀的道長谅畅。 經(jīng)常有香客問我,道長噪服,這世上最難降的妖魔是什么毡泻? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮粘优,結(jié)果婚禮上仇味,老公的妹妹穿的比我還像新娘。我一直安慰自己雹顺,他們只是感情好丹墨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嬉愧,像睡著了一般贩挣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天王财,我揣著相機(jī)與錄音卵迂,去河邊找鬼。 笑死搪搏,一個(gè)胖子當(dāng)著我的面吹牛狭握,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疯溺,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼论颅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了囱嫩?” 一聲冷哼從身側(cè)響起恃疯,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎墨闲,沒想到半個(gè)月后今妄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸳碧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年盾鳞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞻离。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腾仅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出套利,到底是詐尸還是另有隱情推励,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布肉迫,位于F島的核電站验辞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏喊衫。R本人自食惡果不足惜跌造,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望族购。 院中可真熱鬧鼻听,春花似錦、人聲如沸联四。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朝墩。三九已至醉拓,卻和暖如春伟姐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亿卤。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工愤兵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人排吴。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓秆乳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钻哩。 傳聞我的和親對象是個(gè)殘疾皇子屹堰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

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