2009-04-16 3 views
30

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

+0

GNU Gas генерирует файлы '.map' с' -a'. –

ответ

25

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

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

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

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

8

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

Например:

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

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

+0

Вы имеете в виду открытие разборки процесса и проверку необработанных адресов? – sharptooth

+0

Это возможность. Как я уже сказал, они нужны вам редко, но если они вам нужны, вы рады, что они доступны. –

12

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

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

+0

Есть ли что-нибудь на платформе UNIX, похожее на файлы списка? Если да, то как мне его создать? – Shree

+0

не знаю. проверьте свою документацию компилятора. –

8

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

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

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

0

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

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

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

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

Смежные вопросы