использование и значение DW_AT_location - PullRequest
0 голосов
/ 15 марта 2012

Я хотел знать, как использовать атрибут DW_AT_location для отладки. Это один из атрибутов, указанных dwarf для отладки, но он не мог понять, что именно он представляет. А также, когда этот атрибут должен передаваться при компиляции кода.

Ответы [ 2 ]

1 голос
/ 24 октября 2013

Проверьте главу 7 спецификации DWARF 3 , ПРЕДСТАВЛЕНИЕ ДАННЫХ.

Например, если значение DW_AT_location равно 0x91 0x68, из таблицы в главе 7 мы можем узнатьчто 0x91 указывает формат отладочной информации DWARF, который является DW_OP_fbreg, а 0x68 - это смещение SLEB128, мы можем получить его реальное значение: -24.

1 голос
/ 04 апреля 2012

Из спецификации DWARF 3 (http://dwarfstd.org/doc/Dwarf3.pdf):

2.16. Расположение данных Любая запись отладочной информации, описывающая объект данных, которая включает переменные, параметры, общие блоки и т. П., Может иметь атрибут DW_AT_location, значение которогоявляется описанием местоположения (см. Раздел 2.6).

Значением атрибута DW_AT_location является выражение местоположения. Выражения местоположения довольно сложные, я бы посоветовал вам прочитать спецификацию DWARF, на которую есть ссылки выше, чтобы узнатьВ заключение, выражение местоположения может быть простым адресом с местоположением переменной или мини-программой, которая должна быть оценена отладчиком во время выполнения для определения местоположения переменной. Вот несколько примеров выражений местоположенияиз спецификации DWARF:

В идеале ваш компилятор должен генерировать список местоположений для переменной, описывающей ее местоположение во всех точках программы. Отслеживание местоположения переменной через регистры не является тривиальным, поэтому некоторые компиляторы, когдапроизводя отладкуинформация отключает оптимизацию, такую ​​как перемещение переменных в регистры.

...