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

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


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


Ответы (6)


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

asm int 3 end;
person JosephStyons    schedule 17.07.2009
comment
И если позже вы запустите свое приложение и получите необработанное исключение 80000003, это потому, что вы забыли удалить приведенную выше инструкцию. :-) Был там, проделал, футболку одернул. - person Ken White; 17.07.2009

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

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

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

person Ken White    schedule 17.07.2009
comment
Спасибо. Но есть только одна копия этого файла. Уже нашел и стер все dcu и перекомпилировал заново. Уже написал {D +} прямо в исходном коде в этом модуле и исходном файле проекта. - person Felipe; 17.07.2009
comment
Вы искали имя файла на всем жестком диске? И вы все же искали во всех источниках выключатель, отключающий отладку? Я сомневаюсь, что проблема в размере файла, так как у меня есть библиотека компонентов, которая содержит файл служебных функций, состоящий из 9000 строк, и я могу нормально отлаживать его. - person Ken White; 17.07.2009
comment
да. Я использовал Windows File Search, нашел все копии с тем же именем и удалил их. Я сделал несколько ошибок в исходных кодах и перекомпилировал, чтобы проверить, какой файл используется, и сообщить об ошибке компилятора, как и ожидалось. Все остальные модули из того же проекта запускают точки останова отладки в порядке - person Felipe; 17.07.2009
comment
Фелипе: Добавьте ShowMessage ('adsf'); в вашем OnCreate и снова скомпилируйте. Если ваше сообщение не отображается, вероятно, у вас есть несколько копий (может быть, старый файл bpl?), Или имя вашего класса не уникально, и другой класс используется из другого модуля. Когда вы видите свое сообщение, значит, что-то с вашей debuginfo. - person The_Fox; 17.07.2009
comment
спасибо Фокс. Я занимаюсь этим 20 дней: использую ShowMessage для отладки кода в этом модуле, показывая значения переменных, но это слишком сложно. - person Felipe; 17.07.2009

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

person Roland Bengtsson    schedule 17.07.2009
comment
Спасибо. Я пробую это сейчас. Когда получу какие-то результаты, я опубликую. - person Felipe; 18.07.2009

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

person Felipe    schedule 20.07.2009

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

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

person Pauk    schedule 17.07.2009
comment
Спасибо. Я прочитал эту статью сейчас и сделал несколько тестов. Такое же поведение. Попробую удалить код для других юнитов и попробую еще раз. - person Felipe; 17.07.2009

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

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

person Community    schedule 17.07.2009
comment
Спасибо, Дуг. Но я не использую dll или bpl. У меня есть все исходники всех компонентов. Это происходит только в DataModule всего программного кода. - person Felipe; 18.07.2009