2012-03-15 51 views
0

我想知道使用屬性DW_AT_location進行調試。它是矮人用於調試的屬性之一,但不能真正理解它代表的是什麼。而且當我們編譯代碼時應該何時發出這個屬性。DW_AT_location的使用和含義

回答

0

從DWARF 3規範(http://dwarfstd.org/doc/Dwarf3.pdf):

2.16數據位置的任何調試信息條目描述的數據對象,其包括變量,參數,共同塊和 類似,可能具有DW_AT_location屬性,其值是位置 說明(請參閱第2.6節)。

DW_AT_location屬性的值是位置表達式。位置表達式相當複雜,我建議您閱讀上面引用的DWARF規範以瞭解更多信息。總而言之,位置表達式可以是一個簡單的地址,包含變量的位置,或者是一個必須在運行時由調試器評估以確定變量位置的小程序。以下是DWARF規範中的一些示例位置表達式:

理想情況下,編譯器應該爲描述其在程序中所有點上的位置的變量發出位置列表。通過寄存器跟蹤變量的位置不是微不足道的,這就是爲什麼一些編譯器在生成調試信息時會禁用優化,比如將變量移入寄存器。

1

請檢查DWARF 3 spec,DATA REPRESENTATION的第7章。例如,如果DW_AT_location的值是0x91 0x68,從第7章的表中我們可以知道0x91表示DWARF調試信息格式是DW_OP_fbreg,而0x68是SLEB128偏移量,我們可以得到它的實際價值:-24。

+0

這個sleb128偏移究竟是什麼?爲什麼這麼複雜而不是簡單的-24? – stackoverflowwww 2017-01-03 19:02:08