Для чего нужны файлы .map, которые создает компоновщик? - PullRequest
35 голосов
/ 16 апреля 2009

Для чего используются файлы .map, которые создает компоновщик VC ++ при использовании параметра / MAP или параметра проекта «Создать файл карты»? Когда они мне нужны и как я могу от них выиграть?

Ответы [ 5 ]

29 голосов
/ 16 апреля 2009

Хорошая статья о том, как использовать файлы карт для поиска сбоев.

http://www.codeproject.com/KB/debug/mapfile.aspx

Вручную все это делать очень неинтересно.

Мне неизвестны какие-либо инструменты, которые могут прочитать файл карты и помочь в поиске места падения. Если кто-нибудь знает, пожалуйста, сообщите нам.

13 голосов
/ 16 апреля 2009

Для встроенных систем файлы карт намного полезнее. (Хотя вы бы не использовали Visual C ++ для этого;)

Важно знать, например, насколько вы близки к исчерпанию памяти программ / данных и в каком месте находится конкретная переменная.

10 голосов
/ 16 ноября 2010

WinDBG использует файлы .map и .pdb для отладки сбоев при анализе аварийных дампов .hdmp и .mdmp.

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

РЕДАКТИРОВАТЬ: Самый полезный способ отладки "после фактического" сбоя является использование WinDbg для меня (платформа Windows). Откройте его и откройте аварийный дамп. Затем установите исходный путь, чтобы он указывал на код (если он у вас есть), путь к символу, чтобы он указывал на ваши .map и .pdb, а путь к изображению на .exe, и введите «! Analysis -v» в командной строке. , Теперь у вас есть полная трассировка стека со строками кода и всем прочим.
Еще лучше, если у вас есть сервер символов MS в пути и если включена куча полной страницы или запущен adplus. Смотрите эти два моих любимых ресурса WinDbg:
Первая остановка :: http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx
Принудительно загрузить символы :: http://www.osronline.com/ShowThread.cfm?link=182377
Полезный сайт :: http://www.dumpanalysis.org/blog/index.php/category/windbg-tips-and-tricks/page/7/

8 голосов
/ 16 апреля 2009

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

Например:

  • подробная информация по всем сегментам (код, данные и др.).
  • связать номера строк с кодом

Вы можете использовать файлы карт для инструментов отладки.

1 голос
/ 16 января 2018

Карты компоновщика могут быть очень полезны в больших проектах, когда вам нужно отслеживать зависимости между модулями компиляции и библиотеками. Обычно компоновщик сообщает о символе, вызвавшем проблемы, и чаще всего простой поиск по имени этого символа не возвращает никаких результатов (или возвращает тонны ложных срабатываний для таких символов, как read).

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

Карты компоновщика обычно имеют раздел, называемый «ссылка по файлу / символу», в котором указывается, какой объектный файл требовался для другого объектного файла вашего проекта, и на какой символ точно была ссылка.

Однажды я работал над проектом, который должен был быть перенесен в систему без поддержки локали. Компоновщик сообщал об «неопределенной ссылке на _localeconv_r» об ошибках, которые было бы трудно отыскать при поиске по источникам. К счастью, файл карты компоновщика GCC, созданный с помощью -Map=output.map, выявил все проблемные функции с помощью одного поиска.

...