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

iOS高效調(diào)試

移動(dòng)開發(fā) iOS
寫代碼難免出現(xiàn)bug。 儲(chǔ)備些調(diào)試技能絕對(duì)能夠提高你的工作效率,讓bug無所遁形。下面就和大家分享一些我在工作中常用的iOS調(diào)試小技能。

寫代碼難免出現(xiàn)bug。 儲(chǔ)備些調(diào)試技能絕對(duì)能夠提高你的工作效率,讓bug無所遁形。下面就和大家分享一些我在工作中常用的iOS調(diào)試小技能。

1. 打印

最簡(jiǎn)單,基礎(chǔ)的調(diào)試方法就是打印日志了。貼出兩段封裝好的日志打印代碼:

  1. //swift版 
  2. func DLog(message: T, file: String = #file, method: String = #function, line: Int = #line) { 
  3.     #if DEBUG 
  4.         print(", \(method)  \(message)"
  5.     #endif 
  6.   
  7. //OC版 
  8. #ifdef DEBUG 
  9.      #define DLog(fmt, ...) NSLog((@" %s  " fmt), [[[NSString stringWithUTF8String:__FILE__] lastPathComponent]   UTF8String], __LINE__, __PRETTY_FUNCTION__,  ##__VA_ARGS__); 
  10. #else 
  11.     #define DLog(...) 
  12. #endif 

 

eg:

  1. //在AppDelegate.m中調(diào)用下面的方法 
  2. - (void)applicationDidFinishLaunching:(UIApplication *)application{ 
  3.     DLog(@"hello world"); 
  4. //打印結(jié)果: 2016-09-18 17:19:27.931 DateCell[2901:1622220]  -[AppDelegate applicationDidFinishLaunching:]  hello world 

 

2. 斷點(diǎn)

(1)普通斷點(diǎn)

普通斷點(diǎn)是調(diào)試中最常使用的。當(dāng)程序運(yùn)行到斷點(diǎn)處就會(huì)暫停運(yùn)行。其設(shè)置方法非常簡(jiǎn)單:在需要設(shè)置斷點(diǎn)的代碼行的左側(cè)單擊即可。

 

 

 

普通斷點(diǎn)

 

普通斷點(diǎn)

(2)條件斷點(diǎn)(為斷點(diǎn)添加條件和其他屬性,暫且就稱它條件斷點(diǎn))

條件斷點(diǎn)是在普通斷點(diǎn)的基礎(chǔ)上添加了判斷條件。當(dāng)程序執(zhí)行到斷點(diǎn)處,并且滿足設(shè)置的條件時(shí)斷點(diǎn)才會(huì)有效。設(shè)置方法如下:

 

 

 

打開斷點(diǎn)編輯框

 

打開斷點(diǎn)編輯框

 

 

 

這里寫圖片描述

 

這里寫圖片描述

在上面的設(shè)置中,條件斷點(diǎn)的條件是 i==3, 那么在整個(gè)循環(huán)中只有在i=3時(shí)程序才會(huì)在斷點(diǎn)處停止執(zhí)行。

在 Edit Breakpoint…窗口中有下面四個(gè)輸入項(xiàng):

  • Condition 設(shè)置的條件。
  • Ignore 表示忽略多少次之后斷點(diǎn)有效。例如:不設(shè)置條件,Ignore設(shè)置為4,則i=4時(shí)程序在斷點(diǎn)處停止。
  • Action 在程序斷點(diǎn)處執(zhí)行的操作(執(zhí)行完這個(gè)操作后代碼停止運(yùn)行,此時(shí)設(shè)置斷點(diǎn)處的代碼還沒有執(zhí)行)。這里的操作是LLDB語句,關(guān)于LLDB會(huì)在下面介紹。
  • Options 當(dāng)選中時(shí),執(zhí)行完Action的操作后代碼不會(huì)停止,就像沒有設(shè)置斷點(diǎn)一樣。

(3)異常斷點(diǎn)Exception BreakPoint

在設(shè)置異常斷點(diǎn)的情況下 當(dāng)程序crash時(shí) Xcode會(huì)幫我們定位到crash產(chǎn)生的位置。

 

 

 

沒有異常斷點(diǎn)的情況

 

沒有異常斷點(diǎn)的情況

 

 

 

設(shè)置異常斷點(diǎn)的情況

 

設(shè)置異常斷點(diǎn)的情況

設(shè)置異常斷點(diǎn)步驟:

 

 

 

這里寫圖片描述

 

這里寫圖片描述

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

符號(hào)斷點(diǎn)能夠?yàn)槟骋粋€(gè)方法或者 某一個(gè)類的某一個(gè)方法設(shè)置斷點(diǎn)。實(shí)現(xiàn)的功能如下圖:

 

 

 

 

 

某一個(gè)類的某一個(gè)方法設(shè)置斷點(diǎn)

 

在某個(gè)方法中執(zhí)行斷點(diǎn)

設(shè)置步驟如下:

 

 

 

 

符號(hào)斷點(diǎn)設(shè)置步驟

3. LLDB

LLDB的Xcode默認(rèn)的調(diào)試器, 我們通過執(zhí)行LLDB命令使調(diào)試過程更加的靈活。

Xcode內(nèi)嵌LLDB調(diào)試窗口。在程序執(zhí)行到斷點(diǎn)后你可以輸入LLDB命令操作調(diào)試過程。

 

某一個(gè)類的某一個(gè)方法設(shè)置斷點(diǎn)

 

LLDB常用命令如下:

1, po (print object)輸出對(duì)象, 如 po [self view];

2, p (print)用于輸出基本類型, 如 p (int)[[[self view] subviews] count] 輸出子視圖個(gè)數(shù)。

3, expr (expression) 可以在調(diào)試時(shí)動(dòng)態(tài)執(zhí)行指定表達(dá)式,并將結(jié)果打印出來。常用于在調(diào)試過程中修改變量的值。例如上圖所示,程序***次執(zhí)行到斷點(diǎn)時(shí)

執(zhí)行下面的指令:expr i=4

你會(huì)看到如下的輸出: (int) $0 = 4

繼續(xù)運(yùn)行程序,程序輸出的信息是:value:4 i==4

4, call call即是調(diào)用的意思。其實(shí)上述的po和p也有調(diào)用的功能。因此一般只在不需要顯示輸出,或是方法無返回值時(shí)使用call。我們可以在viewDidLoad:里面設(shè)置斷點(diǎn),然后在程序中斷的時(shí)候輸入下面的命令: call [self.view setBackgroundColor:[UIColor redColor]] 此時(shí)view的背景顏色變?yōu)榧t色。

5, bt 打印調(diào)用堆棧,加all可打印所有thread的堆棧。不詳細(xì)舉例說明,感興趣的朋友可以自己試試。

6, fr v -R 命令來打印出變量的未加工過時(shí)的信息

如果想了解更詳細(xì)的內(nèi)容,戳這里。

http://lldb.llvm.org/tutorial.html

4. Chisel

Chisel是 facebook開源的用于界面調(diào)試的lldb命令。

安裝

Chisel 使用 homebrew 來安裝,如果你沒有安裝homebrew, 參考 homebrew。

  1. brew update 
  2. brew install chisel 

 

安裝完成后,在~/.lldbinit 中添加如下內(nèi)容, 沒有~/.lldbinit則新建。

  1. # ~/.lldbinit 
  2. ... 
  3. command script import /path/to/fblldb.py 

 

重啟Xcode, 此時(shí)Chisel就可以使用了。

命令

 

在某個(gè)方法中執(zhí)行斷點(diǎn)

 

命令集合

英語不好的同學(xué)可以看這里。

https://blog.cnbluebox.com/blog/2015/03/05/chisel/

5. 界面調(diào)試?yán)鳎?Reveal

Reveal 絕對(duì)是iOS界面調(diào)試?yán)鳌V灰蒙弦淮文憔蜁?huì)離不開它。對(duì)于Reveal的介紹可以去官網(wǎng)了解。

安裝

Reveal是收費(fèi)的,提倡正版。下面的破解版只供教學(xué)使用,不可用于生產(chǎn)環(huán)境。

1, 從官網(wǎng)(https://revealapp.com/)下載Reveal并安裝;

2,下載破解文件(https://pan.baidu.com/s/1bNPhlO) 提取密碼:7×48;

3,破解步驟見破解文件中的使用說明。

4, 打開Reveal,開始使用。Reveal的新版本可能修改驗(yàn)證邏輯,如果沒有破解成功那就使用正版的吧。

在項(xiàng)目中配置

在使用Reveal之前需要對(duì)iOS項(xiàng)目進(jìn)行簡(jiǎn)單配置。

配置方法1:

Reveal可以使用cocoa pods導(dǎo)入:在Podfile文件中導(dǎo)入 pod ‘Reveal’, ‘~> 1.3’。

配置方法

如果不使用cocoa pods,配置起來略有麻煩。下面是詳細(xì)的配置過程:

1, 使用Xcode打開你想要查看UI的工程;

2, 打開Reveal,點(diǎn)擊 Help → Show Reveal Library in Finder;

 

 

 

這里寫圖片描述

 

這里寫圖片描述

3,將Reveal.framework 拖入打開的Xcode工程.并點(diǎn)擊完成;

 

 

 

 

這里寫圖片描述

4,點(diǎn)擊Build Phases 然后從Link Binary With Libraries 刪除Reveal.framework;

 

 

 

 

從Link Binary With Libraries 刪除Reveal.framework

5, 然后選中Build Settings 在搜索欄中輸入 Other Linker Flags。選中Other Linker Flags

在Other Linker Flags中輸入下面代碼 : -ObjC -lz -framework Reveal

 

 

 

配置 Other Linker Flags

 

配置 Other Linker Flags

6,運(yùn)行模擬器,打開Reveal,鏈接模擬器。

 

 

 

鏈接模擬器

 

鏈接模擬器

到此大功告成。接下來你就可以通過Reveal 對(duì)你的界面進(jìn)行debug了

 

 

 

效果

 

效果

6. 調(diào)試工具集:FLEX

FLEX是Flipboard開源的一系列在應(yīng)用中調(diào)試的工具集。FLEX以第三方庫的形式集成在應(yīng)用中,使用時(shí)將類庫加到工程中,然后 通過調(diào)用[[FLEXManager sharedManager] showExplorer]; 就可顯示出用于調(diào)試的工具欄進(jìn)行調(diào)試。

它提供的功能如下:

  • 查看、修改views
  • 查看任何對(duì)象的屬性
  • 動(dòng)態(tài)的修改屬性
  • 動(dòng)態(tài)的調(diào)用實(shí)例方法和類方法
  • 查看網(wǎng)絡(luò)請(qǐng)求過程
  • 添加模擬的鍵盤快捷鍵
  • 查看系統(tǒng)日志
  • 從堆中獲取任何對(duì)象
  • 查看沙盒中的文件
  • 查看文件系統(tǒng)中的SQLite/Realm數(shù)據(jù)庫
  • 在模擬器中觸發(fā)3D touch
  • 查看你應(yīng)用中所有的類
  • 快速獲取常用的類,例如[UIApplication sharedApplication], the app delegate, the root view controller on the key window, and more.
  • 動(dòng)態(tài)的查看NSUserDefaults里面的值

簡(jiǎn)直吊炸天。當(dāng)你將FLEX集成到你項(xiàng)目中時(shí)就會(huì)認(rèn)識(shí)到它的威力。

結(jié)語

上面介紹了六種調(diào)試方法,開發(fā)時(shí)可以根據(jù)具體情況選用最合適的調(diào)試方法。

責(zé)任編輯:龐桂玉 來源: iOS大全
相關(guān)推薦

2016-11-23 08:10:16

Android St JRebel調(diào)試神器

2013-05-17 10:54:37

iOS開發(fā)iOS SDK調(diào)試技巧

2019-04-18 09:31:07

iOS項(xiàng)目開發(fā)斷點(diǎn)代碼

2024-11-15 13:15:36

2019-04-12 08:10:33

iOS靜態(tài)分析Xcode

2019-04-26 06:58:56

iOSLLDBXcode

2014-05-13 10:12:17

iOS開發(fā)開源類庫

2016-03-04 10:50:02

ios圓角高效添加

2015-08-20 10:50:33

iOS高效編程習(xí)慣

2016-03-01 14:37:38

iOSLLDB調(diào)試技巧

2018-03-20 12:30:44

iOSPush抓包

2014-12-12 09:52:04

JavaScript

2009-09-10 16:24:23

思科IOS配置思科IOS

2015-08-17 10:13:35

ios習(xí)慣高效

2014-12-17 17:22:34

Cocos Code

2013-12-17 16:01:02

iOSXcodeInstruments

2014-06-27 14:36:03

iOS演示APP原型

2022-09-19 13:42:11

K8Skt-connect開源

2011-03-18 17:35:43

點(diǎn)贊
收藏

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