iOS開發中實用的lldb命令

2021-09-11 14:49:14 字數 3455 閱讀 7852

ppo實際都是expression命令,pe --(e就是expression的簡寫)的別名,poe -o --的簡寫。

p用於執行一段表示式,如p button.backgroundcolor = [uicolor bluecolor];用在下面的情況,原本是紅色的按鈕,會變成藍色

uibutton *button = [[uibutton alloc] initwithframe:(cgrectmake(30, 100, 100, 30))];

button.backgroundcolor = [uicolor redcolor];

[self.view addsubview:button];

複製**

這個的好處就是可以在執行之後,我們還可以操控變數的值的來配合除錯。比如有些流程會根據值不同,走不同的**,用p命令就可以在執行後繼續修改除錯。

po用來輸出乙個指標指向的物件的值。

(lldb) p button

(uibutton *) $1 = 0x00007fb39c50c1f0

(lldb) po button

>

複製**

比如對於乙個按鈕,使用p命令,輸出的是指標的資料,也就是它執行那個記憶體的位址,而我們實際需要的資訊在指向的物件裡,用po就可以直接輸出物件資訊。

可以用來顯示當前的方法呼叫棧資訊。雖然在xcode裡可以檢視,但操作可能沒有在這裡來的快捷。

(lldb) bt

* frame #0: 0x0000000107df7562 testdemo`-[viewcontroller viewdidload](self=0x00007fb39c405600, _cmd="viewdidload") at viewcontroller.m:28

frame #1: 0x0000000108f26cca uikit`-[uiviewcontroller loadviewifrequired] + 1235

frame #2: 0x0000000108f2710a uikit`-[uiviewcontroller view] + 27

frame #3: 0x0000000108def63a uikit`-[uiwindow addrootviewcontrollerviewifpossible] + 65

frame #4: 0x0000000108defd20 uikit`-[uiwindow _sethidden:forced:] + 294

frame #5: 0x0000000108e02b6e uikit`-[uiwindow makekeyandvisible] + 42

frame #9: 0x000000010bfc35f6 frontboardservices`__fbsserialqueue_is_calling_out_to_a_block__ + 24

frame #10: 0x000000010bfc346d frontboardservices`-[fbsserialqueue _performnext] + 186

frame #11: 0x000000010bfc37f6 frontboardservices`-[fbsserialqueue _performnextfromrunloopsource] + 45

frame #12: 0x0000000108906c01 corefoundation`__cfrunloop_is_calling_out_to_a_source0_perform_function__ + 17

frame #13: 0x00000001088ec0cf corefoundation`__cfrunloopdosources0 + 527

frame #14: 0x00000001088eb5ff corefoundation`__cfrunlooprun + 911

frame #15: 0x00000001088eb016 corefoundation`cfrunlooprunspecific + 406

frame #18: 0x0000000107df79cf testdemo`main(argc=1, ar**=0x00007fff57e085c0) at main.m:14

frame #19: 0x000000010b85865d libdyld.dylib`start + 1

(lldb)

複製**

這個斷點型別沒法通過介面新增而且很有用。使用watchpoint可以用來觀察乙個變數或者位址,只要變數發生變化就觸發斷點。

有些時候,我們會發現某個物件的值和我們預期的不一樣,可是又不知道是哪個環節修改了這個值,如果乙個個的查會特別麻煩。而有了watchpoint事情就簡單了。

但是它只能觀察這個指標本身,不能指標指向的物件的變化,所以用處大大受限。比如watchpoint set variable button,那麼:button.backgroundcolor = [uicolor blackcolor];不會觸發watchpoint,而button = nil;會變。

1、 可以使用記憶體直接列印,比如輸出了乙個按鈕:

printing description of $18:

>

複製**

這個是使用debug view hierarchy檢視的時候,用滑鼠操縱列印的。如果你想看uibutton內部的其他屬性怎麼辦?比如檢視enabled屬性。

(lldb) po [0x7fdb44d16dc0 isenabled]

0x0000000000000101

複製**

使用po + 執行方法的形式,因為enabled屬性的getter方法是isenabled,所以用了isenabled,而不是enabled

2、 使用p/po命令來宣告乙個變數:

printing description of $9:

>

(lldb) po id $mybutton = [0x7feadc520090 self]

複製**

(lldb) po $mybutton

>

複製**

有了這些,可以更方便的使用lldb來檢視和**物件的性質了!!

ios開發 lldb命令常用

lldb命令常用 假如你準備在模擬器裡面執行這個,你可以在 lldb 提示的後面輸入下面的 lldb po eaxlldb在xcode4.3或者之後的版本裡面是預設的偵錯程式。假如你正在使用老一點版本的xcode的話,你又gdb偵錯程式。他們有一些基本的相同的命令,因此假如你的xcode使用的是 g...

實用LLDB命令 Xcode除錯

命令名 用法 說明 expr expr 表示式 可以在除錯時動態執行指定表示式,並將結果列印出來,很有用的命令。popo 表示式 與expr類似,列印物件,會呼叫物件description方法。是print object的簡寫 print print type 表示式 也是列印命令,需要指定型別。b...

IOS 除錯lldb命令常用 po

lldb命令常用 備忘 假如你準備在模擬器裡面執行這個,你可以在 lldb 提示的後面輸入下面的 lldb po eax lldb在xcode4.3或者之後的版本裡面是預設的偵錯程式。假如你正在使用老一點版本的xcode的話,你又gdb偵錯程式。他們有一些基本的相同的命令,因此假如你的xcode使用...