Отладочная точка останова не работает только в модуле DataModule - Delphi

Отладочная точка останова прекрасно работает во всех остальных 38 единицах моей системы. Но в моем DataModule, который имеет +- 10.000 строк, delphi отключается после запуска F9/F8/F7. В любой части исходного кода этого устройства, даже на обязательных шагах, таких как OnCreate, SQLConnection.Active:=true и т. Д. Подробно: работает хорошо до +- 20 дней назад. Я использую D7 и все источники компонентов также. Спасибо Фелипе

6 ответов

Решение

Я обнаружил эту проблему. Это странное поведение в Delphi7, которое ограничивает количество полей в разделе класса интерфейса, между: type TDM=class(TDataModule) и приватным разделом. Я удалил некоторые поля (Поля DataSet (+-40 полей)), и degub запускается снова. Я снова добавляю эти поля, и отладка не запускается. Я уверен, что это предел, потому что не важно, какие поля компонента я удалил. Я пробовал с несколькими полями, из разных таблиц тоже, добавление, тестирование и удаление. Обидно, но это правда... Спасибо за вашу помощь.

Попробуйте сделать полную сборку (Shift+F9). Если это не работает, то что произойдет, если вы смоделируете точку останова в коде с помощью приведенного ниже?

asm int 3 end;

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

Затем убедитесь, что вы случайно не отключили отладку в своем коде с помощью {$D-} или {$DEBUGINFO OFF}. Это может отключить отладочную информацию для одного устройства.

Также убедитесь, что вы включили встроенную отладку в Сервис | Параметры | Параметры отладчика. Я знаю, что вы сказали, что можете отлаживать другие места, но не мешало бы убедиться, что встроенная отладка не была случайно отключена.

У меня есть смутная память, что отладка очень больших файлов была неисправна в старом D7. Попробуйте разбить ваш большой модуль на несколько классов и, если вы можете отлаживать за пределами вашего модуля. Другим вариантом может быть отключение debuginfo в вашем большом файле, за исключением раздела, который вы хотите отладить. Это стоит попробовать.

Фелипе, это модуль, который не позволит вам отлаживать в DLL, которая перемещается в или из памяти? Я обнаружил при отладке DLL, что если я делаю что-то в исполняемом файле, который выполняет код в другой DLL или выгружает DLL, в которой находится проблемный модуль - Delphi отключит все точки останова. Обычно перезапуск Delphi и сохранение единственного экземпляра dll проблемного модуля в памяти - единственное решение этой проблемы.

Я сомневаюсь, что размер - это проблема, так как у меня есть 17-килобайтный блок, который я регулярно отлаживаю.

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

У нас была та же проблема с большим DataModule в Delphi 5, который не позволял нам отлаживать его, и отчасти объяснял это тем, что он был слишком большим для отладки, а Delphi не понравился. Когда мы перешли на Delphi 2007, мы смогли снова его отладить. Не уверен, почему, ничего не изменилось (код мудрый).

Другие вопросы по тегам