Xcode使用技巧 Xcode除錯方法

2021-07-02 11:45:02 字數 2438 閱讀 7325

這裡記錄一下自己學習到的一些xcode除錯的方法。這些除錯方法可以讓我們使用xcode編寫**進行除錯時用起來更順心應手。

xcode的除錯方法包括執行時設定斷點,列印到控制台,手寫命令列印等。

在xcode中需要觀察的變數所在的**處新增斷點,可以讓程式執行到這裡暫停。這時滑鼠懸停在變數名處,xcode會顯示出該變數的資訊。

控制台位於xcode的底端,用於列印程式執行過程中的輸出資訊。在**中呼叫nslog函式,可以列印變數值到控制台中顯示出來。

nslog(@"obj: %@", obj);
需要特別注意的是,儘管nslog可圈可點,但在實際應用中要防備其可能會引起安全問題,因為任何由nslog輸出的內容都會成為應用程式成品**的一部分,也就是說會被任何接觸到應用的人看到。只要把裝置接入資訊管理工具,每個人都能檢視控制台資訊並查詢每一條日誌記錄。這可能會引發一系列嚴重後果,例如向控制台輸出機密邏輯演算法或者使用者密碼等資訊。

我們可以使用巨集來解決呼叫nslog方法可能導致的安全問題,只在除錯版本中呼叫nslog。可以採用全域性可訪問的標頭檔案,把所有日誌記錄都灌進去,而且不用擔心它們會出現在成品**當中。

#ifdef debug  

#define dmlog(...) nslog(@"%s %@", __pretty_function__, [nsstring stringwithformat:__va_args__])

#else

#define dmlog(...) do while (0)

現在如果我們使用dmlog(這個名稱可以隨便起),它將只向除錯版本輸出結果,任何成品**都不會受到影響。pretty_function也幫上了大忙,它會根據日誌資訊**為函式命名。

如果我們在應用的特定點進行中斷,一般來說是為了檢查物件的當前狀態。xcode為我們提供了一套「variables view(變數檢視)」,該檢視位於xcode底部,與控制台相鄰的左方區域。理論上講它的作用是顯示與當前環境相關的所有值的實時狀態,但在實踐中有時無法列出值,或者是並未將值更新為中斷時的最新狀態。幸運的是,我們可以利用一些非常實用的控制台(console)命令自己進行物件檢查工作。1

需要注意的是,上述這些都是gdb的除錯命令,在lldb中會有所差異。隨著xcode 5的發布,lldb偵錯程式已經取代了gdb,成為了xcode工程中預設的偵錯程式。

這裡需要強調的乙個技巧是,通過使用expr 表示式可實現在執行時修改變數的值。2

expr username = @"username"

expr password = @"badpassword"

通過上面的**段,變數usernamepassword分別被重新賦值。

第一種設定方法:

第二種設定方法:

直接通過editing scheme視窗中的run選項下的diagnostics選項卡來設定。

需要注意的問題:

nszombieenabled只能在除錯的時候使用,千萬不要忘記在產品發布的時候去掉,因為nszombieenabled不會真正去釋放dealloc物件的記憶體。

實現方式

#ifdef _for_debug_ 

-(bool) respondstoselector:(sel)aselector

#endif

使用方法:

需要在每個object的.m或者.mm檔案中加入上面**(應該可以使用類屬實現),並且在other c flags中加入-d for_debug(記住請只在debug configuration下加入此標記)。這樣當你程式崩潰時,xcode的console上就會準確地記錄了最後執行的object的方法。3

「ios故障排除指南:基本技巧」 ↩

「xcode lldb debug教程」 ↩

「xcode除錯攻略」 ↩

XCode使用技巧

注意 只能用在 inte ce end中間 由於xcode 4.版本的新特性 property獨攬了 synthesize的功能,進一步簡化了 所以可以理解成xcode 4.以後就可以不再使用 synthesize 注意 只能用在 implementation end中間 在 左側單機 設定完斷點以...

XCode使用技巧

注意 只能用在 inte ce end中間 由於xcode 4.版本的新特性 property獨攬了 synthesize的功能,進一步簡化了 所以可以理解成xcode 4.以後就可以不再使用 synthesize 注意 只能用在 implementation end中間 在 左側單機 設定完斷點以...

Xcode 使用技巧

export lc all zh cn.gb2312 export lang zh cn.gb2312 buildconfig release 這裡是build模式 projectname find name xcodeproj awk f projectdir pwd wwwipadir desk...