Delphi: почему контрольные точки время от времени не могут быть использованы (зеленая выделенная линия в IDE)? - PullRequest
30 голосов
/ 15 апреля 2011

Время от времени я теряю функциональность точек останова в Delphi.

Я думал, что это проблема Delphi 2009, но теперь у меня есть и она в Delphi XE.

В Delphi 2009, удаливФайл .dproj Я снова установил точки останова.

В Delphi XE я не могу отобразить точки останова.У меня обновление 1 со всеми примененными исправлениями.

У кого-нибудь есть решение?

Ответы [ 17 ]

47 голосов
/ 15 апреля 2011

Информация об отладке отсутствует в файле.

Убедитесь, что вы используете конфигурацию отладки.(Project Manager дерево, разверните Build Configurations, убедитесь, что Debug выделено жирным шрифтом. Если это не так, щелкните правой кнопкой мыши Debug и выберите Activate в контекстном меню.) Убедитесь, что вы затем выполните Build вашего проекта, а не просто Компиляция .

Если это все еще не работает, перейдите к Project->Options в главном меню IDE, нажмите Compiling в разделе Delphi Compiler и проверьте раздел Debugging в правой половине окна.Убедитесь, что Debug Information и Local Symbols оба отмечены.Если вы пытаетесь отследить собственный источник VCL, также отметьте Use debug .dcus (вам нужно отключить это и сделать полную сборку вашего проекта, как только вы закончите, так как это раздражает, когда вы 'повторная отладка нормально).Опять же, вам захочется собирать, а не компилировать.

Если все вышеперечисленное завершится неудачно, другая возможность состоит в том, что открытая вами единица кода в редакторе кода не совпадает с той, которую видит компилятор,Убедитесь, что у вас нет нескольких копий файла на вашем компьютере в месте, которое компилятор может найти первым.Если вы не уверены, удалите файлы .dcu с этим именем модуля, а затем выполните сборку проекта и посмотрите, находится ли вновь созданный .dcu в том месте, где вы ожидаете.

21 голосов
/ 04 августа 2011

Я нашел лучший способ.

В дереве диспетчера проектов щелкните правой кнопкой мыши проект и выберите «Очистить» во всплывающем меню.

Точки прерывания появляются волшебным образом, и это очень быстрый метод.

13 голосов
/ 15 апреля 2011

Я подозреваю, что это происходит, когда вы выполнили сборку релиза с отключенной отладкой. Затем вы переключаетесь обратно в отладочную конфигурацию и выполняете компиляцию, а не сборку. Файлы, в которых нельзя установить точки останова, соответствуют файлам с DCU, созданными компиляцией с отключенной отладкой.

Простая сборка для повторной генерации всех файлов DCU заставит ваши контрольные точки снова работать.

5 голосов
/ 26 июля 2013

У меня была такая же проблема с XE4. Вот почему я нашел эту статью пару часов назад. Ни одно из вышеперечисленных решений не помогло мне. Правильным решением для меня - до сих пор - было добавить опцию «символы удаленной отладки». Странно, потому что я не использую удаленную отладку. В любом случае, теперь все выглядит нормально.

4 голосов
/ 18 ноября 2018

Вот еще одна причина неправильного выравнивания кода по сравнению с маркерами точек останова (сине-красная «таблетка» в желобе).

Редактор распознает три разных конца строки,

  • CRLF (возврат каретки - пара перевода строки)
  • CR только
  • LF only

Из них CRLF является значением по умолчанию в редакторе.

Однако компилятор, похоже, не считает CR only окончанием строки, только CRLF и LF only. Таким образом, если ваш исходный файл содержит один или несколько CR only, «синие таблетки» будут смещены относительно источника.

Возможно, вы получили исходные файлы с символом CR only EOL (конец строки), например, с. интернет. Я помню, MAC OS использовала CR only в качестве EOL.

Чтобы проверить EOL в вашем файле, вы можете включить отображение EOL в редакторе

( Tools - Options - Editor options - Source options - Show line breaks).

Символы выглядят странно (см. Изображения ниже), но просто C сверху L для CRLF, C сверху R для CR и L сверху F для LF.

На следующих изображениях показаны обычные EOL (CRLF) и EOLS после того, как я принудительно установил CR only для одной строки и LF only для другой строки в шестнадцатеричном редакторе. Как сказано выше, именно CR only смещает маркеры точки останова из исходного кода.

Обычный CRLF EOL:

enter image description here

Одна строка с CR only и одна с LF only:

enter image description here

Fix
Чтобы сбросить все EOL на CRLF, снимите отметку Preserve line ends в Editor Options

( Tools - Options - Editor options),

внести тривиальное изменение, чтобы файл был помечен как измененный, закройте файл, сохраните изменения в XYZ.pas? ДА и вновь открыть.
Теперь все окончания строки - CRLF. Перестройте проект, и все шары точки останова будут в правильных местах.

3 голосов
/ 23 июля 2014

Включение удаленных символов отладки сделало это для меня (больше ничего не работало). Проект> Параметры> Связывание и проверка Включить символы удаленной отладки.

2 голосов
/ 29 мая 2013

Другой причиной неработающей точки останова может быть (часто проверяется с delphi5):
Слишком много процедур в блоке.
Решение состоит в том, чтобы перенести процедуры в другое подразделение

2 голосов
/ 12 декабря 2012

У меня была связанная проблема: я потерял точки останова в определенном файле, но другие файлы были в порядке. Произошло то, что я переименовал этот файл, но неизвестный мне DCU для старого файла все еще использовался, потому что где-то на него ссылались в предложении «использования».

Решение состоит в том, чтобы вручную удалить все DCU (выполнение «очистки» недостаточно, потому что старый файл, представленный DCU, больше не находится в проекте), и перестроить. Вы получите сообщение об ошибке компиляции, в котором будут отображены неправильные предложения «use».

1 голос
/ 21 декабря 2013

Я тоже столкнулся с той же проблемой, поэтому я пришел сюда. В дополнение к решению Дэвида Хеффернана я добавляю сюда изображение. В моем случае это было очень просто. В проводнике проекта это было Release, когда я изменил его Debug, он работает для меня. Пожалуйста, посмотрите на изображение. Make changes in Project explorer

Спасибо Счастливое Кодирование Икбал

1 голос
/ 29 июня 2015

Если файл, в котором вы пытаетесь установить точки останова, является частью DLL, вам нужно активировать эту DLL, дважды щелкнув по ней в Project Manager, чтобы она стала жирной, а затем построить ее.Затем синие круги появятся рядом с линиями, где вам разрешено устанавливать контрольные точки.

...