2016-11-04 2 views
3

Я хотел бы добавить файл карты в качестве ресурса, а затем извлечь файл каждый раз, когда вы запускаете систему, чтобы гарантировать, что файл карты всегда прав, и упростить жизнь поддержки. В Delphi 7 я могу скомпилировать проект с файлом карты как ресурсом, но карта неверна, потому что, когда возникает исключение, стек вызовов ошибочен. В Delphi Seattle я даже не могу скомпилировать, потому что он пытается добавить ресурс до создания карты. Я знаю, что могу добавить файл в post-compile thask, но есть ли способ сделать это в процессе компиляции/сборки? Извините, если я не очень конкретный, это мой первый вопрос. Благодарю.Можно ли добавить файл .map в качестве ресурса проекта при компиляции?

UPDATE

После того как я прочитал некоторые ответы, я сделал некоторые исследования. Я уже использовал модуль исключения JEDI в своем проекте, но я не знал эксперта JEDI Debug. Он делает то, что я хочу, и многое другое. Эксперт JEDI Debug конвертирует файл .map в файл .jdbg, который является зашифрованным файлом карты (карта - это всего лишь текстовый файл). Кроме того, файл jdbg составляет около 12% меньше, то карта. Он также имеет опции для . Вставьте jdbg в двоичный файл (exe). Чтобы сделать это, я включил опции:

  • Project -> JCL Debug эксперт -> Создать .jdbg файлы -> Enabled для этого проекта

  • Project -> Эксперт JCL Debug -> Вставить jdbg данных в двоичном -> Enabled для этого проекта

  • Project -> JCL Debug эксперт -> Удалить файлы карты после преобразования -> Enabled для этого проекта (если вы хотите удалить файл, конечно)

Чтобы использовать этот инструмент вне IDE, например, с Jenkins, мне пришлось построить проект, доступный в JEDI \ jcl \ examples \ windows \ debug \ tools \ MakeJclDbg.dpr. После сборки он будет генерировать exe-файл в каталоге bin jcl. Как использовать:

MakeJclDbg -J -E -М map_filename

J - Создать .JDBG файлы

E - данные отладки Вставить в исполняемые файлы

M - Удаление MAP файла после преобразования

Исполняемые файлы должны быть в том же каталоге, что и файлы MAP. Это создаст файл jdbg (основанный в файле карты), вставьте в exe и удалите карту. С этим (и с исключением из JEDI), когда возникает исключение, оно доступно для меня трассировкой стека, версиями всех dll, используемых системой, информацией о системной информации и т. Д., А также посылает все это на Эл. адрес.

Я понял, что у Embarcadero также есть jdbg-файлы с их bpl, поэтому я думаю, что они используют инструмент JCL.

+2

@Jerry: What * code *? Вопрос задает вопрос о добавлении ** ресурса ** в исполняемый файл. Нет никакого кода. Это файл карты, сгенерированный компоновщиком при создании исполняемого файла. –

+2

@Jerry: Нет. Вы также можете добавить его из командной строки или события после сборки, используя brcc или MS rcc. Но даже если вы просите IDE сделать это, это еще не код; это директива компилятора, которая представляет собой простой '{$ R filename.ext}' –

+3

@Rodrigo: JEDI имеет возможность встраивать файл карты в исполняемый файл для вас и блок отладки, который вы можете использовать непосредственно в своем приложении для использования он не извлекает его на диск. Другие инструменты отладки (такие как MadExcept и Eureka) также имеют одинаковую функциональность. Гораздо проще использовать один из них, а не пытаться катиться самостоятельно. –

ответ

3

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

1

Вам не хватает точки.

Файлы MAP генерируются в виде отдельного файла для избежать увеличивая размер исполняемого файла. Попытка вставить этот файл обратно в исполняемый файл в качестве ресурса просто побеждает цель.

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

  • Если вы довольны увеличенным размером EXE и хотите отладочную информацию, включенную в исполняемый файл: Не используйте параметр файла карты. Просто включите возможность привязки к include debug information. (И убедитесь, что ваша инфраструктура отладки будет использовать его.)
  • Большинство структур отладки рекомендуют компилировать с включенным stack frames. Это очень важно, потому что облегчает создание структуры отладки для стека вызовов.
  • Некоторые фреймворки отладки имеют функцию, позволяющую угадать недостающую информацию о стеке вызовов. Если включено, вам нужно будет вручную игнорировать любые записи стека, которые на самом деле не имеют смысла.
  • Конечно, не забывайте, что любые единицы, скомпилированные без отладочной информации, не будут иметь отладочную информацию для включения в окончательный исполняемый файл.
+0

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

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