От новичка до гуру: Курсы программирования на CyberDuff

Как addr2line может найти исходный файл и строку кода?

addr2line переводит адреса в имена файлов и номера строк. Я все еще новичок в отладке, и у меня есть несколько вопросов о addr2line.

  1. Если я отлаживаю определенный файл .so (двоичный), как инструмент может найти файл с исходным кодом (откуда его взять!), Что, если исходный код не существует?

  2. Какова связь между адресом в двоичном файле и номером строки в его источнике, чтобы addr2line мог выполнять такое сопоставление?


Ответы:


1

В целом, addr2line лучше всего работает с исполняемыми файлами ELF или общими библиотеками с отладочной информацией. Эта отладочная информация выдается компилятором, когда вы проходите -g (или -g2 и т. д.) на GCC. В частности, он обеспечивает сопоставление между расположением исходного кода (имя исходного файла, номер строки, номер столбца) и функциями, именами переменных, стек вызовов организация фрейма и т.д. и т.п... Информация об отладке находится сегодня в DWARF (а также обрабатывается gdb отладчиком, libbacktraceбиблиотека и т. д. и т. д.). Обратите внимание, что отладочная информация содержит пути к исходным файлам (а не сам исходный файл).

На практике вы можете (и часто должны) передать параметр отладки -g (или -g2) в GCC даже с флаги оптимизации, такие как -O2. В этом случае отладочная информация немного менее точна, но все еще применима на практике. В некоторых случаях кадры стека могут исчезнуть (встроенные вызовы функций, оптимизация хвостовых вызовов и т. д.).

Вы можете использовать утилиту strip(1) для удаления отладочной информацию (и другие таблицы символов и т. д.) из некоторого исполняемого файла.

01.01.2017
Новые материалы

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

Игра в прятки с данными
Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

«Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

Все о кейсах: Camel, Snake, Kebab & Pascal
В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..