сопоставить адреса памяти с номерами строк, используя информацию DWARF - PullRequest
4 голосов
/ 24 июня 2011

У меня есть приложение, которое отслеживает выполнение программы через память.Я пытался использовать readelf --debug-dump=decodedline, чтобы получить информацию об адресе памяти / строке #, но адреса памяти, которые я вижу, часто не совпадают с адресами, которые дает этот дамп.Я написал что-то, чтобы сопоставить каждый адрес с «самым последним», появляющимся в данных DWARF - похоже, это кое-что очистило, но я не уверен, является ли это «официальным» способом интерпретации этих данных.

Может кто-нибудь объяснить точный процесс сопоставления адреса программы с номером строки, используя DWARF?

Ответы [ 2 ]

4 голосов
/ 21 июля 2011

Посмотрите на программу addr2line. Вероятно, он может дать вам несколько советов о том, как это сделать, если не решит вашу проблему полностью (например, путем ее обстрела или связывания ее функциональности).

0 голосов
/ 09 июля 2019

Действительно, как уже упоминалось в ответе Фила Миллера, addr2line ваш друг.У меня есть gist , где я показываю, как получить номер строки в (C ++) исходном коде приложения по адресу, полученному из обратной трассировки.

После этого процесса вы не увидите упомянутый вами процесс, но сможете дать представление о том, как код отображается в объектном коде (в исполняемом файле или библиотеке / архиве).Надеюсь, это поможет.

...