Есть ли способ добавить файл.map в качестве ресурса проекта при компиляции?
Я хотел бы добавить файл карты в качестве ресурса, а затем извлекать файл каждый раз при запуске системы, чтобы гарантировать, что файл карты всегда правильный, и облегчить жизнь поддержки. В Delphi 7 я могу скомпилировать проект, используя файл карты в качестве ресурса, но карта неправильная, потому что при возникновении исключения стек вызовов неверен. В Delphi Seattle я даже не могу скомпилировать, потому что он пытается добавить ресурс перед созданием карты. Я знаю, что могу добавить файл в пост-компиляции, но есть ли способ сделать это во время компиляции / сборки? Извините, если я не очень конкретен, это мой первый вопрос здесь. Благодарю.
ОБНОВИТЬ
После того, как я прочитал несколько ответов, я провел небольшое исследование. Я уже использовал модуль исключения JEDI в своем проекте, но я не знал эксперта по отладке JEDI. Это именно то, что я хочу, и даже больше. JEDI Debug expert преобразует файл.map в файл.jdbg, который является зашифрованным файлом карты (карта - это просто текстовый файл). Кроме того, файл jdbg примерно на 12% меньше, чем карта. У этого также есть варианты вставить jdbg в двоичный файл (exe). Для этого я включил параметры:
Проект -> JCL Debug expert -> Создать.jdbg файлы -> Включено для этого проекта
Проект -> JCL Debug expert -> Вставка данных jdbg в двоичный файл -> Включено для этого проекта
Проект -> JCL Debug expert -> Удалить файлы карты после преобразования -> Включено для этого проекта (если вы хотите удалить файл, конечно)
Чтобы использовать этот инструмент вне IDE, например, с Дженкинсом, мне нужно было создать проект, доступный в JEDI \ jcl \ examples \ windows \ debug \ tools \ MakeJclDbg.dpr. После сборки он сгенерирует exe-файл в каталоге bin jcl. Как пользоваться:
MakeJclDbg -J -E -M map_filename
J - Создать.JDBG файлы
E - Вставить данные отладки в исполняемые файлы
M - Удалить файл MAP после конвертации
Исполняемые файлы должны находиться в том же каталоге, что и файлы MAP. Это создаст файл jdbg (основанный на файле карты), вставит в exe и удалит карту. С этим (и с исключением модуля JEDI), когда возникает исключение, мне доступна трассировка стека, версии всех dll, используемых системой, информация об операционной системе и т. Д., А также отправка всего этого на Эл. адрес.
Я понял, что у Embarcadero также есть файлы jdbg их bpl, поэтому я думаю, что они также используют инструмент JCL.
2 ответа
Нет, файл карты генерируется после привязки выходных данных программы. Невозможно включить еще не сгенерированный файл карты в качестве ресурса в проект.
Вы упускаете суть.
Файлы MAP генерируются как отдельный файл, чтобы избежать увеличения размера исполняемого файла. Попытка внедрить этот файл обратно в исполняемый файл как ресурс просто побеждает цель.
Вы не упомянули, какую среду отладки вы используете. Но есть и другие способы предоставления отладочной информации, и я предлагаю вам обратиться к документации по инфраструктуре отладки, которую вы используете для подробностей. Я просто предложу некоторые общие концепции, применимые к большинству фреймворков, которые я пробовал.
- Если вы довольны увеличенным размером EXE и хотите, чтобы отладочная информация была включена в ваш исполняемый файл: не используйте опцию файла карты. Просто включите опцию связывания, чтобы включить отладочную информацию. (И убедитесь, что ваш отладочный фреймворк будет использовать его.)
- Большинство сред отладки рекомендуют компилировать с включенными фреймами стека. Это очень важно, потому что это облегчает отладочной среде выводить стек вызовов.
- Некоторые платформы отладки имеют функцию, позволяющую угадывать недостающую информацию стека вызовов. Если включено, вам нужно будет вручную игнорировать любые записи стека, которые на самом деле не имеют смысла.
- Конечно, не забывайте, что любые модули, скомпилированные без отладочной информации, не будут иметь отладочной информации для включения в конечный исполняемый файл.