Почему работает addr2line только для функций - PullRequest
6 голосов
/ 03 августа 2011

У меня есть addr2line, работающий для адресов функций:

$ nm -S executable | grep main
08048742 000000a0 T main
$ addr2line -e executable 08048742
/home/blablabla/src/main.c:80

К сожалению, это работает, только если я передаю адрес функции, когда передаю адрес символа данных (например, адрестаблица crc) она никогда не может разрешить номер файла / строки:

$ nm -S executable | grep tableCRC
080491bc 00000200 r tableCRC
$ addr2line -e executable 080491bc
??:0

Я полагаю, что такого рода отладочная информация просто не включена для данных, потому что эта функция, вероятно, предназначена для анализа следов, но, возможноесть опция компилятора / компоновщика для принудительного выполнения этого?

Я хочу использовать вывод addr2line для генерации подробной информации о том, сколько памяти использует файл или модуль (вместо глобального числа, сообщаемогоразмер инструмента).

1 Ответ

5 голосов
/ 03 августа 2011

Возможно, вам нужны параметры --print-size и --line-numbers для нм .

Обратите внимание, что объект ELF должен содержать отладочную информацию для --line-numbersвозможность работать.

...