簡體   English   中英

使用 lldb 進行調試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM