Для чего используются файлы карт компоновщика gcc?

Что есть ".map "файлы, сгенерированные опцией компоновщика gcc / g++ "- Map " используется для ? И как их читать ?

2 ответов


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

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

файл карты-это карта из памяти - > расположение кода. Он дает вам имя функции по заданному адресу памяти. Из-за оптимизации он может быть не очень точным, но он дает вам возможность начать с поиска ошибок, которые вызывают сбой.

теперь, за 30 лет написания коммерческого программного обеспечения, это единственное, для чего я использовал файлы карт. Дважды успешно.


что есть ".map "файлы, сгенерированные опцией компоновщика gcc / g++ "- Map " используется для?

нет такой вещи, как "gcc linker" -- GCC и linker являются независимыми и отдельными проектами.

как правило, карта используется для понимания решений, которые ld сделано при связывании двоичного файла. От man ld:

-M
   --print-map
       Print a link map to the standard output.
       A link map provides information about the link, including the following:
       ·   Where object files are mapped into memory.
       ·   How common symbols are allocated.
       ·   All archive members included in the link, with a mention of the symbol which caused the archive member to be brought in.
       ·   The values assigned to symbols.
       ...

если вы не понимаете, что это значит, у вас, вероятно, нет (пока) вопросов, на которые отвечает этот вывод, и, следовательно не нужно его читать.