Решение проблемы размера исполняемого файла

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Решение проблемы размера исполняемого файла

Сообщение Павел Ишенин » 07.11.2008 06:39:21

Кто сталкивается с лазарусом в первую очередь удивляется большому размеру исполняемого файла. Все мы знаем причину и как с ней бороться, но хотелось бы все же эту проблему устранить полностью. И, в принципе, разработчикам fpc это удалось. А суть решения - создать отдельный файл с отладочной информацией. Нужно отлаживать - gdb подхватывает этот файл сам.

В чем собственно вопрос. Как обычно, надо протестировать эту особенность. Открываем compiler options - Linking - "Use external gdb debug symbols file (-Xg)" - ставим галочку.

Естественно сами мы тестировали, но у вас гораздо больше систем, приложений, и др. особенностей.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Решение проблемы размера исполняемого файла

Сообщение Logo » 07.11.2008 08:01:33

Разделяет :) Я так понял, что компиляция с -Xg полностью переносит отладочную информацию не только приложения, но и модулей fpc, rtl и Lcl, даже если они были откомпилированы без -Xg.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Решение проблемы размера исполняемого файла

Сообщение Павел Ишенин » 07.11.2008 08:05:07

Какой-то хитрый вопрос :) Вся (без разбора на rtl, fcl, lcl) отладочная информация, которая раньше была свалена в исполняемый файл, теперь лежит рядом в другом файле.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Решение проблемы размера исполняемого файла

Сообщение Andreich » 07.11.2008 09:45:28

Павел Ишенин писал(а):И, в принципе, разработчикам fpc это удалось.

О какой версии FPC/Lazarus идет речь?
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Решение проблемы размера исполняемого файла

Сообщение Павел Ишенин » 07.11.2008 10:01:15

fpc видимо 2.2.2 (хотя может быть и раньше? ) а вот lazarus - тот что в trunk. Если ошибок работы не будет, то опция скорее всего будет включена по умолчанию для всех новых и старых проектов.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Решение проблемы размера исполняемого файла

Сообщение Logo » 07.11.2008 14:33:33

Павел Ишенин писал(а):Какой-то хитрый вопрос :) Вся (без разбора на rtl, fcl, lcl) отладочная информация, которая раньше была свалена в исполняемый файл, теперь лежит рядом в другом файле.

Дело в том, что сначала я просто откомпилировал проект, выставив -Xg, а fpc и Lazarus не компилировались. Получил выполняемый файл 6,2Мб и отладочный 9,1Мб. Обработка утилитой strip не изменила размер. После этого решив, что библиотеки, то содержат отладочную информацию, я перекомпилировал fpc и lazarus с -Xg, - получил исполняемый файл 6,3Мб, а отладочный по прежнему 9,1. Вот такой хитрый эксперимент и породил хитрый вопрос :). Думаю вопросы будут еще.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Решение проблемы размера исполняемого файла

Сообщение Vadim » 07.11.2008 14:45:55

Компилирование не-Lazarus проекта даёт уменьшение исполняемого файла на 400 байт. Ура, товарищи! :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Решение проблемы размера исполняемого файла

Сообщение Logo » 07.11.2008 14:56:33

При использовании Lazarus 0.9.26 / fpc 2.2.2, опцию можно включить, вписав ее в /etc/fpc.cfg (или другой cfg, какой Вы используете).

Добавлено спустя 7 минут 51 секунду:
Интересно, Lazarus из SVN и fpc 2.3.1 дали файлы выполняемый 6.2 и дебаг 9.1.
А Lazarus 0.9.26 /fpc 2.2.2 дали файлы выполняемый 6.4 и дебаг 11 мегабайт.

Добавлено спустя 1 час 3 минуты 21 секунду:
Ну вот, есть одна неприятность :)
Если откомпилировать fpc 2.2.2 с -Xg, то Lazarus 0.9.26 не компилируется. Это не для разработчиков, а для экспериментаторов :)
Но проекты компилируются и дебаг отделяется в отдельный файл нормально.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Решение проблемы размера исполняемого файла

Сообщение Сергей Смирнов » 07.11.2008 16:26:54

Павел Ишенин писал(а):fpc видимо 2.2.2 (хотя может быть и раньше? ) а вот lazarus - тот что в trunk. Если ошибок работы не будет, то опция скорее всего будет включена по умолчанию для всех новых и старых проектов.
Что-то в сегодняшнем снапшоте 0.9.26.1 (17256) ничего такого не видно. Оно в 0.9.26 вообще будет?
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Re: Решение проблемы размера исполняемого файла

Сообщение Павел Ишенин » 07.11.2008 18:34:52

Если тестирование выявит работоспособность то будет в 0.9.26.2 иначе только в 0.9.28. Тестируйте. Интересен результат на linux и mac osx.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Решение проблемы размера исполняемого файла

Сообщение Logo » 07.11.2008 19:41:57

Павел Ишенин писал(а):Если тестирование выявит работоспособность то будет в 0.9.26.2 иначе только в 0.9.28. Тестируйте. Интересен результат на linux и mac osx.

Значит связка fpc 2.2.2 / Lazarus 0.9.26 тоже актуальна. Хорошо, детально еще перепроверу описаную выше проблему и выложу.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Решение проблемы размера исполняемого файла

Сообщение Attid » 07.11.2008 21:05:38

ГУИ

билд

Код: Выделить всё
38531027 2008-11-07 19:58 ac


стрип

Код: Выделить всё
5789256 2008-11-07 19:59 ac


-Xg билд

Код: Выделить всё
  5789336 2008-11-07 20:00 ac
32743627 2008-11-07 20:00 ac.dbg


strip
Код: Выделить всё
5789336 2008-11-07 20:02 ac



консольное приложение
билд
Код: Выделить всё
13517274 2008-11-07 20:03 ack


-Xg билд

Код: Выделить всё
3461232 2008-11-07 20:04 ack
10057762 2008-11-07 20:04 ack.dbg
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Решение проблемы размера исполняемого файла

Сообщение Logo » 07.11.2008 23:33:07

Тест под Linux x86_64, SuSe 11,0. Lazarus 0.9.26, fpc 2.2.2

При первой компиляции fpc c установленными одновременно -Xs -Xg (-Xs случайно не заметил) привело к тому, что Lazarus перестал компилироваться, жалуясь на отсутствие DEBUG_* переменных во всех модулях lazarus. Перекомпилировав fpc c "-g -gl -Xg" все заработало и дальнейшее присутствие -Xs почему-то не влияло никаким образом. Видимо нужно будет установить зависимость ключей, если включен srip (-Xs), то -Xg неактивный, ведь и смысла в нем тогда нет.

Дебагер заработал, вроде ведет себя так же, как и прежде. Никаких пока неприятностей не замечено.

Если компилируете из Lazarus 0.9.26, то -Xg лучше прописать в Project->Compiler Options->Other. Внизу memo поле с заголовком Custom options. Там и вписываем -Xg.

Сам Lazarus смог перекомпилировать только из коммандной строки:
## make clean all PP=/usr/local/lib/fpc/2.2.2/ppcx64 COMPILER_OPTIONS="-g -gl -Xg"
В IDE Lazarus, я не нашел, как заставить самого Lazarus перекомпилироваться с -Xg.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Решение проблемы размера исполняемого файла

Сообщение Павел Ишенин » 08.11.2008 06:08:42

очевидно нужен lazarus из trunk чтобы поставить эту опцию в IDE
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Решение проблемы размера исполняемого файла

Сообщение Logo » 08.11.2008 06:48:00

Тест под Linux Mandriva 2009.0, Lazarus Trunk, FPC 2.3.1

Lazarus из Trunk работает на отлично. Опция везде корректно включается(и галочкой и вписыванием в строки опций), во всяком случае, проблем не встретил. Пробовал на fpc 2.3.1, довольно долго пришлось поработать с дебагером, - ведет себя стандартно. Не заметил ничего отрицательного.

Lazarus 0.9.26 /fpc 2.2.2 в работе ведут себя нормально, не встретил каких-либо новых проблем или особенностей с отладчиком.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru
cron