llvm-dwarfdump - 傾印與驗證 DWARF 除錯資訊

概要

llvm-dwarfdump [選項] [檔案名稱 …]

描述

llvm-dwarfdump 解析物件檔案、封存檔和 .dSYM 套件中的 DWARF 區段,並以人類可讀的形式印出其內容。除非指定了區段特定的選項或 --all,否則只會印出 .debug_info 區段。

如果未指定輸入檔案,則會改為使用 a.out。如果使用 - 作為輸入檔案,llvm-dwarfdump 會從其標準輸入串流讀取輸入。

選項

-a, --all

傾印所有支援的 DWARF 區段。

--arch=<arch>

傾印指定 CPU 架構的 DWARF 除錯資訊。架構可以名稱或數字指定。此選項可以多次指定,每次指定一個所需的架構。預設會印出所有 CPU 架構。

-c, --show-children

在使用 --debug-info=<offset> 參數選擇性印出,或使用 --find--name 等選項時,顯示除錯資訊條目的子項目。

--color

在輸出中使用顏色。

--error-display=<value>

設定驗證時要顯示的詳細程度和摘要。暗示 --verify。支援的值為:

quiet - 僅顯示是否發生錯誤。summary - 僅顯示找到的錯誤摘要。details - 詳細顯示每個錯誤,但不顯示摘要。full - 顯示每個錯誤以及摘要。[預設]

-f <name>, --find=<name>

在加速表中搜尋完全符合 <name> 的文字,並印出符合的除錯資訊條目。當沒有加速表或在加速表中找不到您要尋找的 DIE 名稱時,請嘗試使用速度較慢但更完整的 --name 選項。

-F, --show-form

在 DWARF 屬性類型之後顯示 DWARF 表單類型。

-h, --help

顯示此命令的說明和用法。

--help-list

顯示此命令的說明和用法,但不將選項分組為類別。

-i, --ignore-case

在使用 --name 時忽略大小寫區別。

-n <name>, --name=<name>

尋找並印出所有名稱(DW_AT_name 屬性)為 <name> 的除錯資訊條目。

--lookup=<address>

在除錯資訊中查找 <address>,並印出檔案、函數、區塊和行表詳細資訊。

-o <path>

將輸出重新導向到 <path> 指定的檔案,其中 - 為標準輸出串流。

-p, --show-parents

在使用 --debug-info=<offset> 參數選擇性印出,或使用 --find--name 等選項時,顯示除錯資訊條目的父項目。

--parent-recurse-depth=<N>

當顯示除錯資訊條目的父項目時,僅顯示到最大深度 <N>。

--quiet

--verify 一起使用,以不輸出到 STDOUT

-r <N>, --recurse-depth=<N>

當顯示除錯資訊條目時,僅顯示子項目到最大深度 <N>。

--show-section-sizes

顯示所有除錯區段的大小,以位元組表示。

--show-sources

印出除錯資訊中提及的所有原始碼檔案。盡可能提供絕對路徑。

--statistics

收集除錯資訊品質指標,並以機器可讀的單行 JSON 輸出印出結果。輸出格式在以下章節中描述(統計輸出格式)。

--summarize-types

縮寫類型單元條目的描述。

-x, --regex

在使用 --name 搜尋時,將任何 <name> 字串視為正規表示式。如果也指定了 --ignore-case,則正規表示式會變為不區分大小寫。

-u, --uuid

顯示每個架構的 UUID。

--diff

以更友善的格式傾印輸出,以便比較來自兩個不同檔案的 DWARF 輸出。

-v, --verbose

傾印時顯示詳細資訊。這有助於除錯 DWARF 問題。

--verify

透過驗證編譯單元鏈、DIE 關係圖、位址範圍等,來驗證 DWARF 資訊的結構。

--verify-json=<path>

將 JSON 格式的錯誤摘要輸出到 <path> 指定的檔案。暗示 --verify。輸出格式在以下章節中描述(驗證 JSON 輸出格式)。

--version

顯示工具的版本。

--debug-abbrev, --debug-addr, --debug-aranges, --debug-cu-index, --debug-frame [=<offset>], --debug-gnu-pubnames, --debug-gnu-pubtypes, --debug-info [=<offset>], --debug-line [=<offset>], --debug-line-str, --debug-loc [=<offset>], --debug-loclists [=<offset>], --debug-macro, --debug-names, --debug-pubnames, --debug-pubtypes, --debug-ranges, --debug-rnglists, --debug-str, --debug-str-offsets, --debug-tu-index, --debug-types [=<offset>], --eh-frame [=<offset>], --gdb-index, --apple-names, --apple-types, --apple-namespaces, --apple-objc

依名稱傾印指定的 DWARF 區段。預設只會顯示 .debug_info 區段。某些條目支援新增 =<offset> 作為一種方式,在各自的區段中提供要傾印的確切條目的可選偏移量。當提供偏移量時,只會傾印該偏移量處的條目,否則將傾印整個區段。

--debug-macro 選項會同時印出 .debug_macro 和 .debug_macinfo 區段。

--debug-frame--eh-frame 選項是別名,在兩個區段都存在的情況下,一個命令會輸出兩者。

@<FILE>

<FILE> 讀取命令列選項。

統計輸出格式

--statistics 選項會產生單行 JSON 輸出,表示已處理除錯資訊的品質指標。這些指標有助於比較兩個編譯器之間的變更,特別是判斷編譯器變更對除錯資訊品質的影響。

輸出格式為鍵值對。第一個鍵值對包含版本號碼。以下命名方案用於鍵

  • variables ==> 區域變數和參數

  • local vars ==> 區域變數

  • params ==> 形式參數

對於彙總值,使用以下鍵

  • sum_of_all_variables(…) ==> 應用於所有變數的總和

  • #bytes ==> 位元組數

  • #variables - entry values … ==> 變數數量,不包括條目值等。

驗證 JSON 輸出格式

--verify-json 建立的 JSON 輸出的格式為

{
  "error-categories": {
    "<first category description>": {"count": 1234},
    "<next category description>": {"count": 4321}
  },
  "error-count": 5555
}

如果沒有報告錯誤,則會產生以下內容

{
  "error-categories": {},
  "error-count": 0
}

結束狀態

如果輸入檔案已成功解析和傾印,llvm-dwarfdump 會傳回 0。否則,它會傳回 1。

參見

dsymutil(1)