|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
После долгих размышлений и изысканий удалось разобраться почему в 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. Принимаю благодарности и предложения о работе ... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2010, 19:18 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Потрясающе!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2010, 22:52 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Я знаю, что Find declarations в Delphi глючит, но не настолько - чета фигня какая-то ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2010, 00:16 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Schnider... Именно в этом и кроется проблема, "Find Declaration" работает только если юнит скомпилирован с опцией "Reference Info"! А "Defenition Only" можно устанавливать в релиз версии, для уменьшения размера полученных dcu и отключать в дебаг-версии. ... Проверял на Delphi 5 и 2010. у меня на D7 Reference Info включена всегда, но проблема все равно есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2010, 14:30 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Рукоплескал стоя! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2010, 10:10 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
маленький принцу меня на 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, может в этом проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2010, 21:44 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
SchniderПринимаю благодарности и предложения о работе ... Здорово! Просто русский Марк Руссинович . У меня D6 и подобные глюки имеют место. Теперь знаю, где копать. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2010, 02:25 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Для package: можно в исходнике package установить сразу {$REFERENCEINFO ON} и перекомпилировать, предварительно удалив файлы dcu. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 00:08 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Действительно, для пакетов в IDE, в опциях не устанавливается Reference Info (хотя отметка ставится, но не сохраняется). Есть еще один трюк: можно в dpk файле для опций вида {$REFERENCEINFO OFF} вручную убрать знак доллара, оставив вместо него пробел, т.е. { REFERENCEINFO OFF}. В этом случае при компиляции из командной строки можно переопределять опции (чего при обычном файле не происходит). IDE с таким файлом тоже работает без проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2010, 11:23 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
А Reference Info и Symbol Reference Info - это одно и то же или нет? Потому что просто Reference Info я не могу найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 10:21 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
X11 А Reference Info и Symbol Reference Info - это одно и то же или нет? Потому что просто Reference Info я не могу найти. Да, одно и тоже. В старых версиях Delphi называлось просто "Reference Info" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 10:43 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Я уже и модуль прописал, всё равно Ctrl+Click не работает ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 10:50 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Станьте курсором на модуль ufrdParentEdit в списке uses и нажмите Control+Enter, модуль должен открыться. Если этого не происходит, значит путь к этому модулю не прописан в свойствах проекта или IDE ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 11:04 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
да, открывается ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 11:39 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Переключился с LSP на классику - работает. Правда, классический знаток коде ругается на то, что нормально компилируется и работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 12:21 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
В общем. Перезагрузил комп, переключил туда-сюда и проблема ушла. LSP работает, как отдельный процесс и даже их два вижу. Хотя я и перезапускал IDE, это не помогало. Ну... понаблюдаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 12:27 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
У меня в проекте LSP вообще нифига не работает. Classic Code Insight работал идеально. В Delphi 11 Classic выбросили - остался только ебучий LSP. С чем всех и поздравляю. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 18:49 |
|
Решение: Не работает "Find Declaration" !
|
|||
---|---|---|---|
#18+
Проблема снова проявилась, перезагрузка ПК не помогла. LSP ведь показывает, откуда ноги растут функция, но но Ctrl+Click реакции нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2021, 12:34 |
|
|
start [/forum/topic.php?fid=58&msg=36688671&tid=2037012]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 267ms |
total: | 410ms |
0 / 0 |