Приложение Delphi не имеет "отладочной информации" при отладке
мы создали приложение, которое использует пакеты и компоненты. Когда мы отлаживаем приложение, "журнал событий"в IDE часто показывает, что наши BPLs загружаются без отладочной информации ("нет отладочной информации"). Это не имеет смысла, потому что все наши пакеты и EXEs построены с debug.
_(each project) | Options | Compiling_
[ x ] Assertions
[ x ] Debug information
[ x ] Local symbols
Symbol reference info = "Reference info"
[ ] Use debug .dcus
[ x ] Use imported data references
_(each project) | Options | Linking_
[ x ] Debug information
Map file = Detailed
У нас есть 4 проекта, все построены с помощью runtime pacakges:
- ядра.bpl
- компоненты.bpl
- плагин.bpl (использует оба #1 & #2)
- MainApp.exe (использует #1)
Проблем
1) много раз, когда мы отладка компонентов.bpl загружен отладочной информацией, но все значения в окне "локальные переменные" пусты. Если вы наведете курсор мыши на переменную в коде, всплывающего окна не будет, а окно оценки также ничего не покажет (панель "результат" всегда пуста).
2) Иногда журнал событий показывает "нет отладочной информации" для различных BPLs. Для например, если мы активируем плагин.проект bpl и установить его запуск | параметр хост-приложения, чтобы быть MainApp.exe, а затем нажмите F9, все модули, похоже, загружаются с "отладочной информацией", за исключением плагина.модуль БПЛ. Когда он загружается, журнал событий показывает "нет отладочной информации". Однако, если мы закроем приложение и сразу же нажмем F9, оно снова запустится без перекомпиляции и на этот раз плагина.bpl загружен debug ("имеет Debug Информация.)"
вопросы
1) что вызовет окно "локальные переменные" в не отображения значений?
2) Почему bpls иногда загружаются без отладочной информации, когда BPL был выполнен с debug и всеми отладочными файлами (dcu, map и т. д.) доступны?
7 ответов
мы столкнулись с аналогичной проблемой в нашем проекте. К сожалению, у нас есть десятки bpl, поэтому мы не можем объединить их в одном. Эта проблема появилась после того, как мы перешли на XE2 и изменили структуру папок нашей цели компиляции. Хотя трудно сказать, если новые версии Delphi ввели проблему или нет, мы могли бы исправить эту проблему, добавив папку, в которой bpls компилируются в переменной среды path. Использование функции переопределения пути IDE. Этот тип конфигурации был не обязательно в Delphi 2010...
я бы описал свою проблему с ним.
я динамически загружаю пакет с помощью .
я вижу в SysInternals.com Process Monitor
это имя пакета.DCP открылся и успешно прочитал после LoadPackage
обработано - нет файла ввода-вывода не удалось, нет попытки найти его в неправильных местах, ничего подозрительного. возможно, в DCP есть какая-то конструкция, которая заставляет отладчик IDE сходить с ума. Я тоскую по временам, когда Turbo Debugger
был доступен для Delphi.
кстати, то же самое для имя_пакета.RSM один создает такое.
затем (во время паузы в точке останова или трассировке шага) я открываю Просмотр / Отладка Окон / Модулей и см. последний модуль мой-и он имеет пустую ячейку "информация о символе". Я щелкните его правой кнопкой мыши, выберите "повторная загрузка символов" действие - и вот оно, теперь я могу отладки.
PS. Не знаю, если это поможет мне отладить секции инициализации, хотя, надеюсь,"break on load
" пункт меню будет работать даже с динамический LoadPackage
звонки...
PPS. Он действительно работает, даже при перезапуске IDE. Так что теперь я предупрежден при загрузке BPL с CPU View
, Я CTRL+ALT+M
, прокрутите вниз, чтобы найти мой BPL, r-click to Reload Symbols
, нажмите Enter, затем закройте Modules
и CPU
вид и нанести удар F9 (Run)
. После initialization
завершает разделы я снова предупрежден CPU View
- просто несколько JMP
s Перед выходом из LoadPackage
- Так я рядом CPU View
и stike F9
еще раз. Довольно утомительно, но все же лучше. чем перезапуск IDE.
этой неофициальный инструмент устраняет многие проблемы с Delphi. Он исправил загрузку модуля без debug info Для меня. Все кредиты magicandre1981.
вы должны создать свои отдельные пакеты с отладочной информацией, и вы в конечном итоге захотите построить их без отладки - так что у вас будет и в 2 местах. Затем вы хотите создать свой проект приложения с помощью debug info. Проверьте пути, чтобы убедиться, что источник пакета с поддержкой отладки включен в сборки проекта отладки. Похоже, вы можете включать пакеты, которые были построены без отладки, потому что вы включаете из неправильного источника. Вы должны убедиться, что у вас нет оба пути включены, оставляя Delphi выбирать, что включать, если он находит один и тот же пакет в двух местах.
для нашей конкретной ситуации мы смогли исправить проблему, объединив ядро.ПБЛ и комплектующие.bpl в один BPL. Теперь все модули загружаются с отладочной информацией, и случайная проблема, когда окно Locals не будет отображать значения для переменных, решена.
эта проблема может быть выпущена в QC#109291:
когда Delphi IDE начнет вводить .файл dproj и конфигурация сборки с наборами опций, это значительно улучшает управление выпуском проекта.
однако он также имеет побочный эффект, который трудно воспроизвести и поймать, и я думал, что это ошибки в IDE. Проблема должна всегда путать пользователей, где какой-то проект не может отлаживаться в отладчике IDE. Даже мы проверяем все связанные настройки компилятор и параметры связывания в project, отладчик не будет активироваться в проекте. Какой-то проект работает, а какой-то нет. Мы даже считаем, что это проблема памяти или проблема процессора.
я заметил, что проблема связана с.параметр файла dproj не хранит правильную информацию. Если связанные .dproj файл имеет что-то вроде этого:
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<Import Project="Release.optset" Condition="'$(Cfg_2)'!='' And Exists('Release.optset')"/>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<CfgDependentOn>Release.optset</CfgDependentOn>
</PropertyGroup>
<Import Project="Debug.optset" Condition="'$(Cfg_1)'!='' And Exists('Debug.optset')"/>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<CfgDependentOn>Debug.optset</CfgDependentOn>
</PropertyGroup>
на Release.optset
привязать к Cfg_2
и Debug.optset
привязать к Cfg_1
но Release
настройки с помощью Cfg_1
и Debug
настройки с помощью Cfg_2
.
при построении проекта, отладочная информация не будет создавать в конфигурации debug, но создать в конфигурации release.
открыто обходное решение .dproj с любым текстовым редактором, но не Delphi IDE, и обновление до:
<Import Project="Release.optset" Condition="'$(Cfg_1)'!='' And Exists('Release.optset')"/>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<CfgDependentOn>Release.optset</CfgDependentOn>
</PropertyGroup>
<Import Project="Debug.optset" Condition="'$(Cfg_2)'!='' And Exists('Debug.optset')"/>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<CfgDependentOn>Debug.optset</CfgDependentOn>
</PropertyGroup>
Я нашел в интернет .dprj файл одна строка в cfg_2 détails со значением Debugger_LoadAllSymbols, который был установлен в false. Я сделал это правдой. Проблема решена. Может быть, не похож на ваш случай, но может помочь.
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
...
<Debugger_LoadAllSymbols>true</Debugger_LoadAllSymbols>
...
</PropertyGroup>