OberonCore https://forum.oberoncore.ru/ |
|
Пересобр. ББ не запускается после изменения проц. в Services https://forum.oberoncore.ru/viewtopic.php?f=23&t=2286 |
Страница 1 из 1 |
Автор: | id_ler [ Среда, 27 Январь, 2010 10:02 ] |
Заголовок сообщения: | Пересобр. ББ не запускается после изменения проц. в Services |
viewtopic.php?f=30&t=615&sid=e11407d60b8529449db251ecb56d7f52&start=40 Vlad писал(а): Дмитрий Сурков писал(а): Если разработчик на каком-то этапе решает добавить проверку пост-условия в свою процедуру, или послать уведомление о выполнении операции, то сделать это надежно, без сильного изменения логики процедуры, можно лишь в том случае, если в ней нет операторов RETURN. 1) Проверку пост-условий можно вынести в отдельную процедуру. 2) Некоторые языки позволяют сделать это явно или более другими способами, нежели явным ASSERT в конце функции. Код: (!) DevLinker.Link В модуле Services дополняем процедуру SameType вполне тривиальной строкой,BlackBox.exe := Kernel$+ Log Files HostFiles StdLoader 1 Applogo.ico 2 Doclogo.ico 3 SFLogo.ico 4 CFLogo.ico 5 DtyLogo.ico 1 Move.cur 2 Copy.cur 3 Link.cur 4 Pick.cur 5 Stop.cur 6 Hand.cur 7 Table.cur Код: MODULE Services; компилируем без ошибки и ВВ перестает запускаться. Почему?
IMPORT SYSTEM, Kernel, Log; … PROCEDURE SameType* (IN ra, rb: ANYREC): BOOLEAN; BEGIN Log.String("Test"); Log.Ln; RETURN Kernel.TypeOf(ra) = Kernel.TypeOf(rb) END SameType; … |
Автор: | Сергей Губанов [ Среда, 27 Январь, 2010 10:25 ] |
Заголовок сообщения: | Re: Модификация процедуры |
Прилинкуйте ещё StdLog. Log - интерфейсный модуль (его реализация в StdLog). Аналогично как в Files и HostFiles: Files - интерфейс, HostFiles - реализация. |
Автор: | Евгений Темиргалеев [ Среда, 27 Январь, 2010 11:11 ] |
Заголовок сообщения: | Re: Модификация процедуры |
А зачем линковать Log? Services всё равно динамически грузится |
Автор: | id_ler [ Среда, 27 Январь, 2010 12:49 ] |
Заголовок сообщения: | Re: Модификация процедуры |
Евгений Темиргалеев писал(а): А зачем линковать Log? Модуль Log я прилинковал для чистоты эксперимента.
|
Автор: | id_ler [ Среда, 27 Январь, 2010 12:50 ] |
Заголовок сообщения: | Re: Модификация процедуры |
Сергей Губанов писал(а): Прилинкуйте ещё StdLog. Пересобрал ВВ в следующей конфигурацииLog - интерфейсный модуль (его реализация в StdLog). Аналогично как в Files и HostFiles: Files - интерфейс, HostFiles - реализация. Код: (!)DevLinker.Link При запуске ВВ запрашивает прилинкованный Init. Сообщение: Startup: code file not found. Здесь возникает еще вопрос: почему Init динамически загружается только стандартным ВВ?
BlackBox.exe := Kernel$+ Files HostFiles StdLoader Math Strings Dates Meta Dialog Services Fonts Ports Stores Log Converters Sequencers Models Printers Views Controllers Properties Printing Mechanisms Containers Documents Windows StdCFrames Controls StdDialog StdApi StdCmds StdInterpreter HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows HostPrinters HostClipboard HostCFrames HostDialog HostCmds HostMenus HostPictures TextModels TextRulers TextSetters TextViews TextControllers TextMappers StdLog (* Init *) |
Автор: | id_ler [ Среда, 27 Январь, 2010 15:48 ] |
Заголовок сообщения: | Re: Пересобр. ББ не запускается после изменения проц. в Services |
Попробовал повторить тест во вновь установленном чистом ВВ, без рабочей папки. Первоначально система загружается без видимых ошибок, но попытки открыть любой символьный файл заканчиваются сообщением о переполнении стека. Код: stack overflow
- TextModels. StdWriter. WriterChar (pc=000053BD, fp=00032018) - TextMappers.Formatter.WriteChar (pc=000019E0, fp=00032028) - TextMappers.Formatter.WriteString (pc=00001AF2, fp=0003204C) - StdLog.LogHook.String (pc=00000820, fp=00032064) - Log.String (pc=0000019A, fp=0003208C) - Services.SameType (pc=000006A2, fp=000320A4) - TextModels. Attributes.Equals (pc=00000593, fp=000320BC) - TextModels.WriteChar (pc=000051BA, fp=000320EC) - TextModels.StdWrite.WriteChar (pc=0000544D, fp=00032120) - TextMappers.Formatter.WriteChar (pc=000019E0, fp=00032130) - TextMappers.Formatter.WriteString (pc=00001AF2, fp=00032154) - StdLog.LogHook.String (pc=00000820, fp=0003216C) |
Автор: | Евгений Темиргалеев [ Среда, 27 Январь, 2010 16:17 ] |
Заголовок сообщения: | Re: Модификация процедуры |
id_ler писал(а): Евгений Темиргалеев писал(а): А зачем линковать Log? Модуль Log я прилинковал для чистоты эксперимента.id_ler писал(а): В модуле Services дополняем процедуру SameType вполне тривиальной строкой, и id_ler писал(а): компилируем без ошибки и ВВ перестает запускаться. Почему? никак не связано (если дело в линковке Log без StdLog)
|
Автор: | Евгений Темиргалеев [ Среда, 27 Январь, 2010 16:21 ] |
Заголовок сообщения: | Re: Пересобр. ББ не запускается после изменения проц. в Services |
id_ler писал(а): Попробовал повторить тест... В дампе видна бесконечная рекурсия Log.String = переполнение стэка.Если Вы хотите чтобы Вам помогли разобраться, надо пожалуй подробно описать Ваши действия, по пунктам. - Что, где меняли - Как собирали - Как запускали Думаю будет лучше приложить ББ-документ с описанием. |
Автор: | Trurl [ Среда, 27 Январь, 2010 16:42 ] |
Заголовок сообщения: | Re: Пересобр. ББ не запускается после изменения проц. в Services |
id_ler писал(а): В модуле Services дополняем процедуру SameType вполне тривиальной строкой Эта "тривиальная строка" приводит к бесконечной рекурсии. При вставке текста в TextModels.StdModel вызывается Services.SameType. |
Автор: | id_ler [ Среда, 27 Январь, 2010 17:53 ] |
Заголовок сообщения: | Re: Пересобр. ББ не запускается после изменения проц. в Services |
Евгений Темиргалеев писал(а): Думаю будет лучше приложить ББ-документ с описанием. Снова установил ВВ из SetupBlackBox15.exe с «чистого листа» и без рабочей директории, дописал Log в секцию импорта и Log.String(“Test”); Log.Ln; в процедуру SameType модуля Services. После компиляции были созданы папка Code и Sym, что обычно. Запустил ВВ и попытался открыть символьный файл System/Code/Services.osf. Это минимально необходимые действия, чтобы получить сообщение о переполнении стека.Конфигурация в рабочей системе просто показала такой эффект, теперь, я полагаю, что в ней нет проблемы. |
Автор: | id_ler [ Четверг, 28 Январь, 2010 12:22 ] |
Заголовок сообщения: | Re: Пересобр. ББ не запускается после изменения проц. в Services |
Еще к вопросу о линковке модуля Init. Его требуется прилинковать, если прилинковать модуль HostRegistry. |
Автор: | Евгений Темиргалеев [ Четверг, 28 Январь, 2010 14:45 ] |
Заголовок сообщения: | Re: Пересобр. ББ не запускается после изменения проц. в Services |
Вы эксперименты проводите ![]() |
Автор: | id_ler [ Пятница, 29 Январь, 2010 19:13 ] |
Заголовок сообщения: | Re: Пересобр. ББ не запускается после изменения проц. в Services |
Евгений Темиргалеев писал(а): Вы эксперименты проводите Определенной необходимости в написании конкретной программы нет. Т.е. нет ни опыта программирования, да и применять его негде было бы. Теоретически, интересная задача – объединить Бутылку\Оберон и ВВ на основе SDL для Linux/Windows, но информации для этого мало. Имею представление о WinApi – переписал непортабельные модули из Оберона в ВВ, а дальше его надо изучать. Вот и экспериментирую.
![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |