[英]Debugging with lldb
全部,
考慮以下類結構:
class Base -> class public Derived1 -> class public Derived2。
即有一個基類。 Derived1 類是 Base 的直接子級,Derived2 類是 Derived2 的直接子級,但不是 Base。
LLDB 中有沒有辦法查看類結構?
我正在嘗試在 OSX 上使用 LLDB 調試我的程序,但很難看到變量的類樹。
我試圖做:
> p (Derived1 *) this
但它沒有幫助 - 它只是在輸出中顯示相同的(Derived2)類及其地址。
謝謝你。
編輯:
試
v *this
結果是:
(lldb) v *this
error: the version command takes no arguments.
(lldb)
編輯2:
這就是我得到的:
Igors-MacBook-Air:Debug igorkorot$ lldb
(lldb) version
lldb-902.0.79.7
Swift-4.1
(lldb)
默認情況下,lldb 使用其完整的動態類型顯示由表達式評估產生的對象。 這是作為“值打印機”的一部分完成的,它在計算表達式后格式化結果。
您表達式的結果是一個對象指針,其靜態類型為 Derived1(因為您對其進行了轉換),但其 vtable 指針指向 Derived2 vtable,表明它的完整動態類型是 Derived2,這就是 lldb 打印它的方式。
一般來說,這實際上非常方便。 例如,如果您在 Base 的方法中,而this
實際上是 Derived2,您通常希望看到完整的對象,而不僅僅是 Base 部分。
您可以使用以下方法關閉動態類型解析:
(lldb) expr -d no-dynamic-values -- (Derived *) this
此外,如果您要求 lldb 顯示一個對象而不是對象指針,lldb 將顯示它按類層次結構組織,基類嵌套在其父類中,每個子類的 ivars 嵌套在其所屬類中。 所以例如:
(lldb) v *this
我會想告訴你你在找什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.