OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 17:52

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: DevPacker bug
СообщениеДобавлено: Пятница, 07 Август, 2009 13:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Дописал сегодня раздельчик "Автоматизация компоновки" в вики. Естественно, всё по ходу дела проверял, так как раньше не пользовался, только идея была. Нашёл баг в DevPacker, который приводил к зацикливанию на этапе чтения имён файлов, см. в самом конце статьи, патчик там же. Аналогичное зависание будет и в том случае, если команда упаковки находится в обычном документе, в самом конце его, и не завершается вьюшкой (например, EndCommander). Всем рекомендую залатать дырку и... пользоваться автоматикой. : )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevPacker bug
СообщениеДобавлено: Пятница, 07 Август, 2009 14:41 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Ещё обнаружил баг. Exe-файл, собранный автоматикой (PrivTrainingMake.Make), отказывается запускаться. Выдаёт вот такое диалоговое окошко:
Код:
---------------------------
BlackBox
---------------------------
трэп #020
- TextViews.SetCtrlDir  (pc=000001AE, fp=0022EB44)
- TextControllers.Install  (pc=000001BD, fp=0022EB58)
- StdInterpreter.CallProc  (pc=000003A6, fp=0022F5DC)
- StdInterpreter.Command  (pc=00001261, fp=0022F6EC)
- StdInterpreter.CallHook.Call  (pc=00001386, fp=0022FF50)
- Dialog.Call  (pc=00003399, fp=0022FF78)
- TextViews.Init  (pc=00004B31, fp=0022FFA0)
- TextViews.$$  (pc=0000000A, fp=0022FFB0)
---------------------------
ОК   
---------------------------

Если вставить в начало раздела инициализации модуля TextControllers вызов HALT (111), то выдаётся в точности то же самое окошко с ошибкой. Если затем слинковать вручную четырьмя коммандерами, а не одним вызовом Make, то окошко будет другое:
Код:
---------------------------
BlackBox
---------------------------
трэп #111
- TextControllers.$$  (pc=00000005, fp=0022E918)
- Kernel.InitModule  (pc=00001030, fp=0022E924)
- Kernel.ThisLoadedMod  (pc=000010AC, fp=0022E93C)
- Kernel.ThisMod  (pc=00001137, fp=0022EA54)
- Meta.Lookup  (pc=00000856, fp=0022EA78)
- StdInterpreter.CallProc  (pc=000002EB, fp=0022F50C)
- StdInterpreter.Command  (pc=00001261, fp=0022F61C)
- StdInterpreter.CallHook.Call  (pc=00001386, fp=0022FE80)
- Dialog.Call  (pc=00003399, fp=0022FEA8)
- TextViews.Init  (pc=00004B31, fp=0022FED0)
- TextViews.$$  (pc=0000000A, fp=0022FEE0)
- Kernel.InitModule  (pc=00001030, fp=0022FEEC)
---------------------------
ОК   
---------------------------
Таким образом, слинкованное вручную приложение отличается от слинкованного моей автоматикой по непонятной пока причине. Суть происходящего в том, что модуль TextControllers импортирует TextViews, а TextViews вызывает TextControllers.Install не прямо, а с помощью Dialog.Call. При этом при ручной линковке Meta.Lookup приводит к нормальной инициализации модуля (выполняется секция BEGIN -- "TextControllers.$$", куда я вставил HALT (111)), а при автоматической линковке этого не происходит, что и приводит к трапу в TextViews.SetCtrlDir (там проверка параметра на NIL, а параметр инициализируется в секции BEGIN модуля TextControllers).

Интересно так же и то, что начало стека вызовов в двух сообщениях отличается: при автоматической линковке отсутствует Kernel.InitModule. Возможно, это косвенно указывает на источник проблем. Добровольцы приглашаются к поиску бага, а у меня время на разбирательства пока закончилось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevPacker bug
СообщениеДобавлено: Пятница, 07 Август, 2009 15:50 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я бы не стал линковать модули статически. Только ядро. Пусть модули идут просто припакованными. Это будет соответствовать обычному режиму работы ББ.

Если модули слинкованы, то их инициализационные секции вызывает преамбула экзешника. Может быть немного другой порядок... Хотя... Секция инициализации Kernel просто не должна отдавать управление.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevPacker bug
СообщениеДобавлено: Пятница, 07 Август, 2009 22:17 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Собирал (руками правда) полностью ББ (всё слинковано), со всем что есть, даже с компилятором... и ничего прёт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevPacker bug
СообщениеДобавлено: Понедельник, 10 Август, 2009 13:10 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Выяснил, что проблема проявляется только если использовать для сборки команду DevLinker.LinkExe. Если использовать DevLinker.Link, то всё работает как должно. Документация Dev/Docu/P-S-I ("Platform-Specific Issues") как-то невнятно оговаривает, в чём разница, и когда какую команду нужно или можно использовать.

Кстати, в том же документе пример для сборки Patterns.exe не работает (ББ 1.5) по причине отсутствия модуля Sub в дистрибутиве, а также отсутствия модулей Log и StdApi в списке для компоновки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevPacker bug
СообщениеДобавлено: Понедельник, 10 Август, 2009 14:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
LinkExe следует использовать для того случая, когда не требуется динамическая загрузка модулей. Стандартный полный ББ всегда надо обычным Link...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevPacker bug
СообщениеДобавлено: Понедельник, 10 Август, 2009 14:07 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Илья Ермаков писал(а):
LinkExe следует использовать для того случая, когда не требуется динамическая загрузка модулей. Стандартный полный ББ всегда надо обычным Link...
Так мне и не требуется динамика. Я полный список статически перечислил. Наоборот, если будет подхватывать с диска иные версии, это может поломать exe-шник (например, если Config будет не тот).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DevPacker bug
СообщениеДобавлено: Понедельник, 10 Август, 2009 14:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да, но, видимо, графический фреймворк ББ рассчитан таки именно на линковку под динамику. При линковке LinkExe порядок инициализации (это хуков касается особенно) меняется.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB