Xcode斷點的一些黑魔法

2022-07-17 10:15:09 字數 2770 閱讀 4984

** 

編碼不能沒除錯,除錯不能沒斷點(break point)。xcode的斷點功能也是越來越強大。

基本斷點

如下圖,這種是最常用的斷點,也是最容易設定。左鍵點選一下就可以設定。 

編輯斷點

斷點是可以編輯的。

斷點有下面幾個屬性可以設定:

condition

這裡可以輸入條件表示式,滿足條件的時候斷點就會生效。例如上面輸入a == 50。這個是非常有用的設定,特別在迴圈體內除錯的時候,用著真的是爽。

ingore

在這裡可以設定忽略斷點次數。

action

action是這裡最複雜的,最強大的功能了。action有6中型別。如下圖

常用的就是log message和debugger command

log message

在這裡填寫的東西可以列印到控制台。例如我做了如下設定:

%b會列印斷點的名字,%h會列印斷點的呼叫次數,@@中間可以輸入表示式。 上面的設定在控制台的輸出如下:

這裡可以輸入除錯命令,也就是po(列印物件資訊),bt(列印函式棧),expression(表示式)這些除錯命令。看圖就明白了:

image 控制台輸出如下:

勾選automatically continue after evaluating actions之後程式會在斷點產生後繼續執行。這個屬性是相當有用的,可以輸入除錯資訊至於不暫停程式。

出了上面的基本斷點外,xcode還提供了下面四種斷點,需要點選斷點面板左下角的+號新增。

exception breakpoint是乙個非常有用的斷點項。正如名字所示,當程式丟擲異常的時候就回產生斷點。通常程式崩潰會停在崩潰的地方,但有時候並不能準確停在引起異常的地方。比如陣列越界!比如我下圖所示,會引起陣列越界訪問。 

程式執行的時候就會崩潰。但是崩潰停在了main函式裡面,就算看了棧資訊也不能馬上定位到到底是那個陣列越界訪問了。為什麼崩潰不能停在陣列越界**?這是因為陣列越界訪問不一定會導致程式崩潰的,陣列越界訪問會導致異常丟擲,而丟擲的異常沒有得到處理才會導致程式崩潰。因此最後會導致崩潰停在corefoundation框架裡面。這個時候就需要設定exception breakpoint產生斷點來定位錯誤了。

opengl es error breakpoint

這個主要是opengl es的斷點除錯,這個個人沒用到過。

symbolic breakpoint

symbolic breakpoint,符號斷點,真的是除錯神器啊。當程式執行到特定符號的時候就會產生斷點。通過這種方式新增斷點,就不需要在原始檔中新增,也不需要知道斷點設定在檔案的第幾行。如圖: 

比普通斷點多了兩個屬性symbol和module。

symbol

symbol的內容,可以有如下幾種: 

1. 方法名稱:會對所有具有此方法名稱的類方法生效。例如 initwithframe: 。 

2. 特定類的方法:oc類和c++類都適用,例如 ,[uiview initwithframe:]或者 shap::draw()。 

3. 函式名稱。例如普通c函式。

通過設定symbol來除錯,好用根本停不下來,想怎麼斷點就怎麼斷點。

test failure breakpoint

這個型別的斷點會在test assertion 失敗的時候暫停程式的執行。

Python的一些魔法方法

init 魔法方法是指 xx 的方法 具有特殊功能 init 魔法方法初始化。會自動呼叫 class washer def init self self.width 400 self.height 500 def print info self print f 洗衣機寬,高為 haier washe...

Xcode開發framework包的一些經驗

最近要做乙個ios上的藍芽sdk,研究了下framework,經過半個多月的折騰終於有了結果。再次吐槽下關於程式設計的中文網頁質量之低。首先是在xcode中建立工程,編寫 專案名為blesdk,這個名字後面還會用到。建立專案的時候記得設定為cocoa touch framework,如圖 這裡寫描述...

Xcode一些Analyze分析的錯誤

1.錯誤 user facing text should use localized string macro 給label賦值的時候,提示 面向使用者的文字應該使用本地化的字串巨集 此為 中配置了本地化,面向使用者的應該用字串巨集,而我們直接賦值為漢字.解決方法 因為copy 通常會返回不可變的副...