Пути к файлам в отладочной инфе
Модератор: Модераторы
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Пути к файлам в отладочной инфе
Пути к файлам в отладочной инфе почему-то относительные.
Причем относительно чего - непонятно.
Т.е. есть допустим путь в выводе Heaptrc:
$000000000042C2EC line 27 of ../../../../../../../mnt/dev/src/test/test.pas
Как понять в каком это файле?
Опция -gostabsabsincludes не влияет на эти пути.
Добавлено спустя 1 час 5 минут 42 секунды:
Похоже, пути к .pas файлам даны относительно рабочей директории при запуске fpc.
А пути к .inc файлам, типа таких:
$0000000000417899 line 888 of ../inc/system.inc
не меняются от изменения этой самой рабочей директории. Относительно чего они заданы? Относительно файла, который инклудит чтоли? Т.е. путь к этому system.inc вообще никак не определить?
Причем относительно чего - непонятно.
Т.е. есть допустим путь в выводе Heaptrc:
$000000000042C2EC line 27 of ../../../../../../../mnt/dev/src/test/test.pas
Как понять в каком это файле?
Опция -gostabsabsincludes не влияет на эти пути.
Добавлено спустя 1 час 5 минут 42 секунды:
Похоже, пути к .pas файлам даны относительно рабочей директории при запуске fpc.
А пути к .inc файлам, типа таких:
$0000000000417899 line 888 of ../inc/system.inc
не меняются от изменения этой самой рабочей директории. Относительно чего они заданы? Относительно файла, который инклудит чтоли? Т.е. путь к этому system.inc вообще никак не определить?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Mirage писал(а):$000000000042C2EC line 27 of ../../../../../../../mnt/dev/src/test/test.pas
если брать абсолютный путь, то это должно быть , если не изменяет память, что-то типа ./mnt/dev/src/test/test.pas
И, скорее всего, действительно отсчет идет от каталога запуска... но не стоит забывать, что есть еще конфигурационный файл в котором проставлены пути поиска. Плюс, есть пути поиска в Лазаре и в самом файле проекта.
Mirage писал(а):Т.е. путь к этому system.inc вообще никак не определить?
При запуске файла или при работе с проектом?
Если второе, то открой его в IDE и, при наведении на заголовок вкладки в редакторе исходных текстов, выйдет подсказка о пути.
Можно также выбрать в меню пункт "Сохранить как" и в диалоге должен открыться каталог расположения файла. Но этот путь не рекомендую, так как при неловком телодвижении есть шанс, что придется качать исходный код Лазаря (FPC) заново.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Лекс Айрин писал(а):если брать абсолютный путь, то это должно быть , если не изменяет память, что-то типа ./mnt/dev/src/test/test.pas
Это не абсолютный путь. Абсолютный начинается на /.
Лекс Айрин писал(а):И, скорее всего, действительно отсчет идет от каталога запуска... но не стоит забывать, что есть еще конфигурационный файл в котором проставлены пути поиска. Плюс, есть пути поиска в Лазаре и в самом файле проекта.
От каталога запуска компилятора. Лазарь тут вообще не причем. Как и пути поиска. Эти пути я вижу уже при запуске самого приложения. В выводе Heaptrc. Или GDB. Но в случае GDB полный путь также прилагается.
Лекс Айрин писал(а):Если второе, то открой его в IDE и, при наведении на заголовок вкладки в редакторе исходных текстов, выйдет подсказка о пути.
Кого открыть-то?
Лекс Айрин писал(а):Но этот путь не рекомендую, так как при неловком телодвижении есть шанс, что придется качать исходный код Лазаря (FPC) заново.
Есть такая штука - система контроля версий называется. Очень помогает от неловких телодвижений.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Mirage писал(а):Это не абсолютный путь. Абсолютный начинается на /.
Это мелочи..
Mirage писал(а):Кого открыть-то?Я же не знаю как раз пути к файлу.
а для этого НЕ надо знать путь. Надо лишь найти где в программе он упоминается и "провалиться" в него. У меня, например, System.inc расположен в каталоге D:\fpc_new\rtl\inc\
для простоты поиска я явно добавил модуль system и уже в нем нашел этот файл. С 888 строки там начинается этот текст:
Код: Выделить всё
TInitFinalRec=record
InitProc,
FinalProc : TProcedure;
end; сам System.pp располагается в D:\fpc_new\rtl\win32\
Mirage писал(а):Есть такая штука - система контроля версий называется. Очень помогает от неловких телодвижений.
Не во всех случаях.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Лекс Айрин писал(а):а для этого НЕ надо знать путь. Надо лишь найти где в программе он упоминается и "провалиться" в него.
Если я знаю в каком файле он упоминается, то я просто разрешу относительный путь в абсолютный.
Но в выводе Heaptrc только эта строка с ../inc/system.inc. И т.к. файлов с таким именем в общем случае может быть несколько, то имеется потенциальная неоднозначность.
А мне надо подсветить путь как ссылку, чтобы можно было кликом на него открыть файл. Видимо, лучшее что тут можно сделать - открывать первый найденный по имени.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Mirage, а не пробовал запустить прогу через отладчик?
А то получится как в анекдоте "А вы на шкаф заберитесь и вытяните голову".
В любом случае, System.Inc один... это модулей System.pp несколько, для каждой оси свой.
А то получится как в анекдоте "А вы на шкаф заберитесь и вытяните голову".
В любом случае, System.Inc один... это модулей System.pp несколько, для каждой оси свой.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Что даст отладчик?
Да и не могу же я обязать под отладчиком запускать, чтобы комфортно смотреть вывод Heaptrc.
Получится как в анек... тьфу, как в Эмбаркадере - "чтобы работало автодополнение нужно скомпилировать программу".
И что мешает создать еще один system.inc и включать его в другом месте?
Впрочем, "обычные" инклуды, похоже, имеют путь как у всех. Это только у system.inc и ему подобных такой видимо. А он не особо и нужен.
Да и не могу же я обязать под отладчиком запускать, чтобы комфортно смотреть вывод Heaptrc.
Получится как в анек... тьфу, как в Эмбаркадере - "чтобы работало автодополнение нужно скомпилировать программу".
И что мешает создать еще один system.inc и включать его в другом месте?
Впрочем, "обычные" инклуды, похоже, имеют путь как у всех. Это только у system.inc и ему подобных такой видимо. А он не особо и нужен.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Mirage, постой... а накуа собранной программе знать путь на компьютере программиста?
Не зря же программисты просят продемонстрировать способ выявления ошибки, чтобы посмотреть у себя.
Ничего... Ты можешь и модуль System кинуть в папку с программой, тем самым подменив стандартный. (скорее всего, не везде, но факт остается фактом).
Да, есть системно-зависимые модули, которые приходится переключать в настройках компилятора. (тот самый выбор платформы для компилятора и набор виджетов) Все остальные ищутся на общем основании. И ошибка, скорее всего, не в стандартных модулях, а в написанных программистом.
Это от людей зависит. Но, скорее всего, не сможешь.
Не зря же программисты просят продемонстрировать способ выявления ошибки, чтобы посмотреть у себя.
Mirage писал(а):И что мешает создать еще один system.inc и включать его в другом месте?
Ничего... Ты можешь и модуль System кинуть в папку с программой, тем самым подменив стандартный. (скорее всего, не везде, но факт остается фактом).
Mirage писал(а):Впрочем, "обычные" инклуды, похоже, имеют путь как у всех. Это только у system.inc и ему подобных такой видимо. А он не особо и нужен.
Да, есть системно-зависимые модули, которые приходится переключать в настройках компилятора. (тот самый выбор платформы для компилятора и набор виджетов) Все остальные ищутся на общем основании. И ошибка, скорее всего, не в стандартных модулях, а в написанных программистом.
Mirage писал(а):Да и не могу же я обязать под отладчиком запускать, чтобы комфортно смотреть вывод Heaptrc.
Это от людей зависит. Но, скорее всего, не сможешь.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Лекс Айрин писал(а):Mirage, постой... а накуа собранной программе знать путь на компьютере программиста?Не зря же программисты просят продемонстрировать способ выявления ошибки, чтобы посмотреть у себя.
Эмм, Heaptrc пользовал? Он выводит пути к файлам, где утечки могут быть. Обычно прогоняется на этапе разработки, т.е. на компе погромиста.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Mirage, но ты говорил, что не хочешь заставлять прогонять пользователя... И этим аргументировал нежелательность запуска под отладчиком...
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Mirage, если бы все, то тема бы не возникла))) В любом случае, отладка показывает где ошибка проявилась, но не всегда где она возникла. Не думаю, что с модулем утечки что-то иное.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
Ты нить-то не теряй.
Проблема не в том, что Heaptrc чего-то не показывает. Проблема в том, что пути, что он показывает - относительные, что неудобно. А они берутся из отладочной инфы, которая -gl.
Впрочем, проблема решена, фича запилена, все довольны.
Проблема не в том, что Heaptrc чего-то не показывает. Проблема в том, что пути, что он показывает - относительные, что неудобно. А они берутся из отладочной инфы, которая -gl.
Впрочем, проблема решена, фича запилена, все довольны.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
На самом деле, относительные пути или нет без разницы.
-
Mirage
- энтузиаст
- Сообщения: 881
- Зарегистрирован: 06.05.2005 20:29:07
- Откуда: Russia
- Контактная информация:
В смысле нет разницы? Если путь абсолютный то все хорошо. Если относительный и непонятно что является базой, то все плохо.
Что делают относительные пути в отладочной информации вообще непонятно.
Особенно, если учесть, что базой является директория, в которой запускался компилятор. Т.е. некая сиюминутная инфа, которая утрачивается сразу же.
Возможно, можно как-то вытащить базу из экзешника, но не видел такого.
Что делают относительные пути в отладочной информации вообще непонятно.
Особенно, если учесть, что базой является директория, в которой запускался компилятор. Т.е. некая сиюминутная инфа, которая утрачивается сразу же.
Возможно, можно как-то вытащить базу из экзешника, но не видел такого.
