Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Решение: Не работает "Find Declaration" ! / 19 сообщений из 19, страница 1 из 1
04.06.2010, 19:18
    #36670320
Schnider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
После долгих размышлений и изысканий удалось разобраться почему в IDE Delphi не работает функция "Find Declaration", а также Code Browser (ctrl + left click на идентификаторе). Обычные проблемы при этом:
1) Не правильно настроены пути в IDE
2) Рассинхронизация файла dcu и исходника (например pas файл был изменен, а dcu видимый среде остался старый) в этом случае обычно (!) помогало удаление всех dcu файлов и повторная компиляция

Но даже если все правильно настроено и откомпилировано "Find Declaration" может упорно отказываться работать. Мне решения этой проблемы в сети найти не удалось, но она мне не довала покоя, поэтому периодически я пытался разобраться с этим, пока наконец это не удалось:

Я обратил внимание, что даже если функция "Find Declaration" не работает для моего кода и сторонних библиотек, которые я сам устанавливал, то она всегда работает для системных модулей. Дельфовые скомпилированные релизные модули хранятся в папке Lib и путь к ним прописан в "Tools\Environment Option\Library\Library Path", дебажные в папке Lib\Debug, путь к ним в "Tools\Debugger options\General\Debug DCU Path". Какие модули использовать релизные или дебажные зависит от опции компилятора "Project\Options\Compiler\Debugging\Use Debug DCU". А путь к системным исходникам прописан в "Tools\Environment option\Library\Browsing Path". Так как функция "Find Declaration" на моем коде то работает, то не работает, а на системных модулях работает всегда был сделан вывод, что это зависит от того с какими опциями копилятора получены dcu.
Потом я заметил, что если самому скомпилировать системный модуль с отключенными опциями в разделе Debugging то размер полученного dcu получается меньше чем тот который хранится в дельфовой Lib. Тут на форуме кто-то уже задавался этим вопросом, почему размер отличается? Опытным путем, а именно перебором возможных комбинаций опций компилятора касающихся отладки и сравнения полученных размеров файлов с дельфовыми, удалось выяснить, что даже релизные версии системных модулей скомпилированы с опциями "Reference Info" и "Definitions Only"!
Именно в этом и кроется проблема, "Find Declaration" работает только если юнит скомпилирован с опцией "Reference Info"! А "Defenition Only" можно устанавливать в релиз версии, для уменьшения размера полученных dcu и отключать в дебаг-версии.
И об этом кстати написано в справке: Delphi HelpReference info/Definitions only Generates symbol reference information used by the Code Browser, Code Explorer, and Project Browser
и на размер исполняемого файла это не влияет.

Проверял на Delphi 5 и 2010.

Принимаю благодарности и предложения о работе ...
...
Рейтинг: 0 / 0
04.06.2010, 22:52
    #36670548
Барсук-копатель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Потрясающе!!!
...
Рейтинг: 0 / 0
05.06.2010, 00:16
    #36670648
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Я знаю, что Find declarations в Delphi глючит, но не настолько - чета фигня какая-то
...
Рейтинг: 0 / 0
05.06.2010, 14:30
    #36671015
маленький принц
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Schnider... Именно в этом и кроется проблема, "Find Declaration" работает только если юнит скомпилирован с опцией "Reference Info"! А "Defenition Only" можно устанавливать в релиз версии, для уменьшения размера полученных dcu и отключать в дебаг-версии.
...
Проверял на Delphi 5 и 2010.
у меня на D7 Reference Info включена всегда, но проблема все равно есть.
...
Рейтинг: 0 / 0
07.06.2010, 10:10
    #36672415
quaid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Рукоплескал стоя!
...
Рейтинг: 0 / 0
15.06.2010, 21:44
    #36688671
Schnider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
маленький принцу меня на D7 Reference Info включена всегда, но проблема все равно есть.
Скорее всего у вас что-то не так настроено. Посмотреть в каких папках Delphi ищет исходники в реальном времени можно с помощью утилиты ProcMon из пакета SysInternals Открываете проект в Delphi, запускаете ProcMon и настраиваете фильтрацию только на файловые операции, PID на процесс Delphi и Path на вхождение (contains) файла для которого будут искаться исходники (без расширения) и нажимаете Find Declaration на данном файле в списке uses. В логе будет видно какие файлы Delphi удалось найти а какие нет. Сначала ищется pas по cледующим путям:
1) Папка проекта
2) Project search path (зависит от опции Use Debug DCUs и соответственно Debug DCU Path)
3) Library Path
Если файл найти не удалось, то ищется dcu по тем же путям и если он найден и скомпилирован с опцией Reference Info то снова ищется pas по тем же путям + Browsing Path.
Если в логе видно, что файл dcu найден, но pas файл после этого не искался, значит dcu скомпилирован без Reference info. Я заметил что в D5 если при компиляции пакета в его опциях отметить Reference info но не отметить Definitions only, то после нажатия ОК галочка Reference Info пропадает, соответственно dcu компилируется без информации нужной для работы Find declaration, может в этом проблема?
...
Рейтинг: 0 / 0
16.06.2010, 02:25
    #36689037
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
SchniderПринимаю благодарности и предложения о работе ...

Здорово!
Просто русский Марк Руссинович .

У меня D6 и подобные глюки имеют место. Теперь знаю, где копать. Спасибо.
...
Рейтинг: 0 / 0
16.12.2010, 00:08
    #37017177
Ronin1024
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Для package: можно в исходнике package установить сразу {$REFERENCEINFO ON} и перекомпилировать, предварительно удалив файлы dcu.
...
Рейтинг: 0 / 0
16.12.2010, 11:23
    #37017759
Schnider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Действительно, для пакетов в IDE, в опциях не устанавливается Reference Info (хотя отметка ставится, но не сохраняется). Есть еще один трюк: можно в dpk файле для опций вида {$REFERENCEINFO OFF} вручную убрать знак доллара, оставив вместо него пробел, т.е. { REFERENCEINFO OFF}. В этом случае при компиляции из командной строки можно переопределять опции (чего при обычном файле не происходит). IDE с таким файлом тоже работает без проблем.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.09.2021, 10:21
    #40099184
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
А Reference Info и Symbol Reference Info - это одно и то же или нет?
Потому что просто Reference Info я не могу найти.
...
Рейтинг: 0 / 0
22.09.2021, 10:43
    #40099195
Schnider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
X11
А Reference Info и Symbol Reference Info - это одно и то же или нет?
Потому что просто Reference Info я не могу найти.

Да, одно и тоже. В старых версиях Delphi называлось просто "Reference Info"
...
Рейтинг: 0 / 0
22.09.2021, 10:50
    #40099200
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Я уже и модуль прописал, всё равно Ctrl+Click не работает
...
Рейтинг: 0 / 0
22.09.2021, 11:04
    #40099203
Schnider
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Станьте курсором на модуль ufrdParentEdit в списке uses и нажмите Control+Enter, модуль должен открыться. Если этого не происходит, значит путь к этому модулю не прописан в свойствах проекта или IDE
...
Рейтинг: 0 / 0
22.09.2021, 11:39
    #40099215
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
да, открывается
...
Рейтинг: 0 / 0
22.09.2021, 12:21
    #40099238
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Переключился с LSP на классику - работает.
Правда, классический знаток коде ругается на то, что нормально компилируется и работает.
...
Рейтинг: 0 / 0
22.09.2021, 12:27
    #40099243
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
В общем. Перезагрузил комп, переключил туда-сюда и проблема ушла.
LSP работает, как отдельный процесс и даже их два вижу. Хотя я и перезапускал IDE, это не помогало.
Ну... понаблюдаю.
...
Рейтинг: 0 / 0
22.09.2021, 18:49
    #40099391
Maxim Rusov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
У меня в проекте LSP вообще нифига не работает. Classic Code Insight работал идеально.
В Delphi 11 Classic выбросили - остался только ебучий LSP. С чем всех и поздравляю.
...
Рейтинг: 0 / 0
23.09.2021, 12:34
    #40099493
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
Проблема снова проявилась, перезагрузка ПК не помогла.
LSP ведь показывает, откуда ноги растут функция, но но Ctrl+Click реакции нет.
...
Рейтинг: 0 / 0
23.09.2021, 13:22
    #40099509
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Решение: Не работает "Find Declaration" !
X11
Проблема снова проявилась,


Это я уже сам стормозил. Был выбран конфиг release, а в конфиге release ведь отключен параметр Symbol Reference Info.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Решение: Не работает "Find Declaration" ! / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]