осваиваем mse

Любые обсуждения, не нарушающие правил форума.

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

осваиваем mse

Сообщение the_beginer » 12.09.2009 21:17:14

Идеей опубликовать все это послужило вот этот информативный ответ на мой вопрос viewtopic.php?f=11&t=4936&p=34884#p34884
============================================================
ПРЕАМБУЛА

Я трезво оцениваю свои способности в программировании на mse и freepascal. Доказательством этого служит мой ник.
Я понимаю, что им, программистам со стажем, не интересно отвечать на вопросы (и уж тем более отвечать подробно, досконально разжевывая), которые они давно для себя уже уяснили и в которых они уже разобрались. Я принимаю что, они могут проигнорировать мои вопросы, сочтя их слишком тупыми, "детскими" и т.п. Я также понимаю, что у них просто на это нет свободного времени.
Но я также понимаю, что документации мало и вся эта информация просто рассчитана на более высокий уровень, чем у меня, и поэтому я вынужден задавать "тупые вопросы", если хочу сам расти в программировании.
Поэтому я вынужден надеяться, что если уж человек решил ответить на мой вопрос, то он ответит в соответствии с его содержанием и на том уровне знаний, который обозначен в вопросе. Либо пусть лучше не отвечает, возможно ответит кто-то другой.
============================================================

На мой вопрос насчет уменьшения размера mse-проектов поступил ответ от форумчанина "Иван Шихалев". Крайне "информативный". Я ведь просил "объясните на пальцах". Лучше бы он проигнорировал вопрос ...

0.на часах 22-00 начали ...
делаем копию проекта, над которой будем изгаляться (блин, глаза уже слипаются, кружка крепкого кофе, в наушниках linkin park).

проект представляет собой поисковик по жесткому диску. В uses добавлены
,process,classes;
Вес оригинального исполняемого файла, если верить nautilus`у 10,7 МБ (11180884 байт)

1.Погнали
Что Шихалев имел ввиду, говоря "Компиляция с параметрами -CX -XX применима всегда."? Куда эти параметры вносить?
Ладно, попробуем мыслить логично.
На форуме больше всего упоминалась отладочная информация, которую можно отбросить и тем самым уменьшить размер. Интересно, а кто в freepascal занимается отладкой? GDB? Наверно он, ведь в его man-странице написано:
Код: Выделить всё
Change  things  in your program, so you can experiment with cor‐
              recting the effects of one bug and go on to learn about another


Ладно как всегда методом проб и ошибок...
mse, открывем проект, далее project -> options в поле "debug options" вбиваем "-CX -XX"
нажимаем "ОК", "F9"
получаем сообщение
Код: Выделить всё
"GDB: can not write to gdb".

компилируем, проверяем размер: 10,7 МБ (11180884 байт).
Хм-м-м, с точностью до байта.
Облом. Что-то неправильно?

2.Поиск по форуму ... открываем viewtopic.php?f=5&t=4219&hilit=strip
читаем:
"Пользуйтесь ключём -Xg (галка "Использовать внешний файл отладочных символов GDB") - компилятор не будет включать отладочную информацию в бинарник, а создаст довольно увесистый файл project.gdb в котором и будет вся информация."

и куда пользовать этот -Xg в mse?
ныряю в консоль:
Код: Выделить всё
"gdb --help"

читаю ... есть какой-то параметр " --command=FILE, -x Execute GDB commands from FILE"
может он? Раз через "запятую", то можно видимо либо то либо другое ..
а пробуем... project -> options в поле "debug options" вбиваем "-х"
жмем "F9" ... телодвижений ноль. в главном окне mse всё то же сообщение, что "gdb: не может писать в gdb" (куда падает ударение, сами разберётесь). Ладно, жмем "Project -> Build". Получаем сообщение, что "Make OK"

Проверяем размер: без изменений. Может, чего не так понял в help`e?

3.Снова "gdb --help". Что они имели ввиду под параметром
Код: Выделить всё
--command=FILE, -x
? FILE - это произвольное имя или как?
Пробуем project -> options в поле "debug options" вбиваем "--command=blah"
"F9" игнорирует меня по-прежнему. Х.. на тебя. "Project -> Build". "Make OK". Это хорошо.
Проверяем размер исполняемого файла ... тот же {вырезано цензурой}

4.Хм... Выкуриваем сигарету, усердно думаем ... Может чего не так перевел в "gdb --help"?!
firefox -> Google "on-line переводчик" ... ага вот он: http://www.translate.ru -> А-а! Старый добрый ПРОМТ! (Здорова брат! Помнишь, как в бытность студентом я учил тебя любить халяву?).
Переводим (а переводишь ты, брат, все так же ху{вырезано цензурой}).
Кстати execute - это выполнить. Тупим, однако, надо больше кофе.
Ладно читаем ... ничего похожего на вывод отладочной информации в отдельный файл. может параметр -Xg не относится с gdb, а к компилятору?
Man по gdb почитать бы более внимательно да русском, да времени нет, сына через полчаса спать укладывать ... сына ... сын ... СЫНА !!!!!

5.Через 20 минут.
У-ф-ф-ф! Вроде загрузился. Отделались простой проверкой диска. И как он, годовалый мальчуган, за две секунды, просто постучав по клавиатуре, завесил мне linux?! Причем повисло все, включая клаву, мышь и колонки (шел какой-то писк). Ладно логи можно и потом почитать. А сейчас пора укладывать этого маленького хакера спать...

6.Еще через 30 минут.
Сын с боем умыт и одет в ночную одежду, уже не лето, а тепло еще не дали. На удивление, сынка решил, что сегодня его будет укладывать спать мама. "Ладно, спокойной ночи, малыш, я - за компьютер".

7.Погнали дальше.
На чем мы остановились? На man`е gdb. И куда нас это заведет?
Еще одна сигарета. На часах 23-30. Спать бы пойти, но, когда я еще найду время по программировать?! Linkin park уже не торкает, попробуем Papa Roach...
Хм ...А может пойти другим путем? Форумчанин "Иван Шихалев" так и не ответил есть ли strip в mse. Он сказал, что "Также всегда применимы strip и upx". Что он, {вырезано цензурой}, имел в виду? Что strip - это компонент лазаруса, но применим и к mse-проектам? Или strip есть и в mse? Или strip это часть fpc?
Ладно, полезли на http://www.freepascal.ru/forum -> Поиск ... ага ...
На странице viewtopic.php?f=1&t=4507&p=32749&hilit=strip#p32749 находим сообшение форумчанина "Sergei I. Gorelkin":
Код: Выделить всё
В линуксах утилита strip должна быть в пакете binutils или подобном (т.е. это часть системы), поэтому ее не включают в состав компилятора.
Можно еще ключ -Xg попробовать, если он там вообще есть (я пользуюсь 2.3.1, поэтому не знаю, есть ли он в 2.2.4). Он должен писать отладочную информацию в отдельный файл, про который потом можно забыть..

Опять этот -Xg! Куда его {вырезано цензурой} пробывать-то?! Судя по теме обсуждения, все-таки к компилятору? и где его в mse прописывать?
Ладно с ним позже, пока strip. Хотя, сразу возникает простой вопрос: "если он часть ОС а не часть паскаля, то насколько правильно он работает?" и главное "как его использовать?". Об этом в сообщении не слова, но все равно форумчанину "Sergei I. Gorelkin" спасибо. Хоть стало понятно, что такое strip и где его искать.

8.Проверяем ... binutils установлена. Значит есть и strip. Запускаем наш поисковик и strip находится в /usr/bin
Читаем "strip --help" и "man strip" до кучи ... лучше бы не читал :) Как им все-таки правильно пользоваться?!
может на форуме есть пример? Поиск по форуму ... еп ! Результат поиска: 110! Будем искать ...

Находим вот такой кусок:
Код: Выделить всё
Sniper писал(а): Вопрос:
скомпилированный Lazarus получается в размере 20Mb! Можно ли уменьшить его?
Ответ:
Можно воспользуйтесь утилитой strip (например: strip lazarus.exe)
точно также можно уменьшить в размере startlazarus.exe : strip startlazarus.exe


Думаем... раз "lazarus.exe" , значит strip применяется к уже скомпилированному файлу. Видимо в линуксе та же схема. Логично? Пробуем...
в консоли вводим
Код: Выделить всё
strip poiskovik
. жмем "enter". Чего-то он бысто отработал ... и ничего не вывел на экран. Не сработал?! Затаив дыхание смотрим размер.

Ага {вырезано цензурой ... очень много вырезано}!

Размер 2,0 МБ (2119464 байт)! Получилось, мать!
А он запустится?! Да, мля, запустился и работает!

9.Через пару минут
Сделав вывод, что я еще не совсем отупел и могу мыслить логично, запустил gnome`вский "системный монитор". Вкладка "Процессы" нашел свой файл. Так, памяти занял "1,9 МБт". Интересно, а оригинальный файл (тот к которому strip не применяли)? Запустил, посмотрел. Что за ...! При размере 10,7 МБт на диске в памяти только "1,8 Мбт". Почему так? И почему меньше, чем тот, пропущенный через strip? Столько вопросов ...

10.Ладно, все таки надо разобраться с -Xg.
Снова логически мыслим ... -Xg полюбому относится с компилятору.
Жмем project -> options. Ну и где здесь опции компилятора? Мартин {вырезано цензурой ... совсем немного}, куда ж ты, проказник, их запрятал... Может это: вкладка "make" - кнопка "show command line"? Жмем. Мда, очень понятная строка... Неужто так сложно сделать встроенную справку? Или у Мартина тоже нет свободного времени?
Ладно, впендюрим сюда. Вот только куда именно? Наверняка есть определенный порядок расстановки параметров.
Куда же, куда?
попробуем так:
Код: Выделить всё
ppc386 -oasfindfile -Fu/home/user/mse/msegui/lib/common/kernel/i386-linux/ -Fu/home/user/mse/msegui/lib/common/kernel/ -Fi/home/user/mse/msegui/lib/common/kernel/ -Fu/home/user/mse/msegui/lib/common/*/ -l -Mobjfpc -Sh -gl [b]-Xg[/b] -O- asfindfile.pas

Ха ... просто вписать не получается! Надо через таблицу, что ниже...
Попробуем вписать с первую строку.
Вписали. Кнопка "ОК". Теперь "Project -> Build" ... Надо же: "Make OK".
Обещанный файл .dbg тоже появился.
Проверяем размер 2,0 МБ (2119536 байт). Чуть больше чем, через strip, но не критично. памяти занял все те же 1,9 МБт.
Может его тоже прогнать через strip? Не-а, размер не изменился, ну и х... с ним.

11.На сегодня хватит. На часах 1-20. Завтра (точнее уже сегодня) на службу.

=====================================================
Эпилог
Я потратил 3 с половиной часа, чтобы найти ответы на свои вопросы. Далеко не полные, но мне, с моим уровнем, даже этого пока достаточно.
Но, блин, мог же он потратить не 2, а 10 минут, отвечая на мои вопросы ...
the_beginer
новенький
 
Сообщения: 30
Зарегистрирован: 29.05.2008 16:51:51

Re: осваиваем mse

Сообщение debi12345 » 12.09.2009 23:20:25

Project => Options => Make : вписать "-CX -XX" в самой верхней строке грида (отвечает за сборку по F9). Лично я эти опции прописываю в самой нижней строке грида для случая сборки компактного релиза (Make 4).

Важно :
1) без чего не будет уменьшена часть, зависящая от FreePascal - он тоже должен быть скомпилирован с опцией "-CX" - узнается по наличию юнитов "lib<unit_name>.a" вместе в обычными "unit_name.ppu"
2) изменения опций проекта не замечаются утиллитой MAKE и компилятором, поэтому чтобы проект пересобрался по новым опциям, нужно в нем что-нибудь изменить - вбить и удалить пробел в исходный текст,..
3) если проект последний раз собран с "-CX", то не будет работать пошаговая отладка - это к отладчику GDB. Для возвращения отладки - пересобрать проект без этих опций.

Еще нюанс : если в настройках редакторе выбран юникод (utf8), то к опциям MAKE нужно добавить недокументированный паскалевый ключ "-Fcutf8" (сказать паскалю, что исходники написаны в юникоде). Да, еще - нестабильные (нерелизные) версии Freepascal-я не гарантируют эффекта от "-CX -XX".

Чтобы не быть голословным, приаттачиваю фрагмент туториала, в котором эта тема "исследована, пронумерована и скреплена печатью".
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: осваиваем mse

Сообщение Attid » 13.09.2009 19:14:29

the_beginer ну вот и просим вас в подфорум "база знаний" описать пошагово инструкцию.

ЗЫ имело смысл спросить на форуме куда имеено вбивать параметры. я бы посоветовал вбить в конец файла /etc/fpc.conf
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: осваиваем mse

Сообщение amateur » 16.09.2009 17:04:38

Make1... Make4 - убрали из мсе??? Разница в размере приложения между лином и виндой гдет 100 кб и они относительно маленькие.
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: осваиваем mse

Сообщение the_beginer » 23.09.2009 18:49:46

Attid писал(а):the_beginer ну вот и просим вас в подфорум "база знаний" описать пошагово инструкцию.

сделаем, обязательно. Как только на службе квартал закроем.
ЗЫ имело смысл спросить на форуме куда имеено вбивать параметры. я бы посоветовал вбить в конец файла /etc/fpc.conf


не-а, не имело. Пойми, я действительно новичок в программировании на паскале. тем более в mse и тем более в линуксе.
Для меня компиляция с параметрами - это пока еще не мой уровень. Ковыряться в исходниках - на это просто нет времени (максимум, что у меня есть это час-полтора поздно вечером). Поэтому сейчас для меня достаточен вариант со strip.
the_beginer
новенький
 
Сообщения: 30
Зарегистрирован: 29.05.2008 16:51:51

Re: осваиваем mse

Сообщение Attid » 24.09.2009 11:11:20

the_beginer писал(а):не-а, не имело. Пойми, я действительно новичок в программировании на паскале. тем более в mse и тем более в линуксе.

я бы предположил что новичек в компьюторе. так как параметры есть практически у всех программ. я вот даже не одной на память не припомню которая не понимает параметры.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E


Вернуться в Потрепаться

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

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

Рейтинг@Mail.ru