OberonCore
https://forum.oberoncore.ru/

Перекомпиляция Блэкбокс со всеми проверками
https://forum.oberoncore.ru/viewtopic.php?f=1&t=1706
Страница 1 из 1

Автор:  igor [ Воскресенье, 12 Июль, 2009 10:20 ]
Заголовок сообщения:  Перекомпиляция Блэкбокс со всеми проверками

Намедни ради интереса перекомпилировал Блэкбокс с опцией allchecks (включить все проверки).
Результат попытки запуска Блэкбокс после этого можно посмотреть на скриншоте.
Вложение:
ScreenShot_01.jpg
ScreenShot_01.jpg [ 30.14 КБ | Просмотров: 10754 ]

Сразу оговорюсь, что я работаю с эксклюзивной неофициальной сборкой Блэкбокс, которая получена из локализованной версии 1.5.
В связи с этим вопрос: может ли кто-нибудь повторить этот опыт с официальной сборкой Блэкбокс? И если результат будет аналогичным, то хотелось бы услышать какой-нибудь комментарий по этому поводу.
Если же ваш опыт будет успешным, то я буду знать, что у меня проблема с "out of range" из-за того, что я "влез", так сказать, в исходники :)

PS. Да, если опцию allchecks не включать,то всё работает хорошо и проблем не возникает.

Автор:  igor [ Воскресенье, 12 Июль, 2009 11:26 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Проверил сам, на версии 1.5.
К счастью, оказалось проблемы у меня. Так что остальные пользователи Блэкбокс могут быть спокойны.
Честно говоря, было бы странно, если бы было иначе. Среда достаточно зрелая, без малого 20 лет - это срок. Ну, а для меня впредь будет наука: если вносишь серьёзные изменения, то включай все проверки. По умолчанию опция allchecks отключена.

Автор:  Info21 [ Воскресенье, 12 Июль, 2009 11:36 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

igor писал(а):
Намедни ради интереса перекомпилировал Блэкбокс с опцией allchecks (включить все проверки).
А хорошая задача -- добиться тут нормальной работы.

Автор:  igor [ Воскресенье, 12 Июль, 2009 11:48 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Дальше ещё интереснее. Стал искать багу, оказалось что проблема даже не в моей эксклюзивной сборке Блэкбокс, а в компиляторе командной строки, который я использую. Но работу над ним я ещё не закончил, так что обнаружил "фифект" очень вовремя. Жаль вот только, что обнаружил случайно. А должно быть закономерно. В пору поглубже поразмышлять о пользе доказательного программирования :)

Автор:  igor [ Воскресенье, 12 Июль, 2009 17:19 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Продолжил поиск ошибки. К сожалению, мой предыдущий вывод о том, что виноват не Блэкбокс, а мой компилятор, оказался ошибочным.
Оставим пока в покое мою потенциально бажную эксклюзивную сборку Блэкбокс вместе с моим компилятором. Как я понимаю, они не вызывают прилива доверия у публики :)
Я проверил официальные версии v1.5 Eng и v1.6rc5 Eng, а также нашу русскую локализованную версию от 19.01.2008 r116. Во всех случаях трабла подтвердилась.

Для всех желающих предлагаю проделать следующий опыт:
1. Скопируйте содержимое рабочей папки Блэкбокс во временную директорию. Далее работать только в ней.
2. Запустите Блэкбокс. Откройте модуль DevCompiler и отредактируйте его. Найдите костанту defopt (опции компилятора по умолчанию) и добавьте в неё опцию allchecks. Сохраните изменения и перекомпилируйте модуль.
3. Выгрузите модуль DevCompiler. (Очень важный пункт. Первый раз я его не выполнил и в результате сделал неправильный вывод -- см. мои посты выше).
4. Перекомпилируйте все модули Блэкбокс при помощи команды DevCompiler.CompileThis. Закройте Блэкбокс.

Очевидно, что после этих манипуляций наш Блэкбокс будет выполнять проверку на переполнение и выход за диапазон (см. модуль DevCPC486). Конфуз однако состоит в том, что Блэкбокс эти проверки не проходит уже при запуске. Либо сами проверки выполняются некорректно.

Вывод, который я только что сделал, представляется мне не правдоподобным. Может я всё-таки что-то напутал. Прошу вывести на чистую воду. :)

PS: Смутные подозрения у меня вызывает реализация стандартных функций CHR и ORD. Более точно ничего сказать пока не могу, ошибку (предположительно! :) ) обнаружил только сегодня.

Вложения:
ScreenShot_02.JPG
ScreenShot_02.JPG [ 29.62 КБ | Просмотров: 10712 ]

Автор:  Info21 [ Воскресенье, 12 Июль, 2009 22:55 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

А! Сразу не понял. Тут речь, видимо, о переполнении целых. Дело сомнительное. В смысле сомнительно, нужно ли требовать проверки переполнений в ран-тайм. Хотя я склонен был бы закручивать все гайки, но тут может оказаться геморрой. Не знаю.

Автор:  Сергей Оборотов [ Воскресенье, 12 Июль, 2009 23:36 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Info21 писал(а):
Хотя я склонен был бы закручивать все гайки, но тут может оказаться геморрой.
Так и есть.
Код:
   | Char8:
         IF f = Int8 THEN Check(y, 0, 0)
При работе с символами как с байтами возникает переполнение. TextModels, например, тоже вылетает на WriteSChar.

Автор:  Валерий Лаптев [ Понедельник, 13 Июль, 2009 09:30 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Info21 писал(а):
А! Сразу не понял. Тут речь, видимо, о переполнении целых. Дело сомнительное. В смысле сомнительно, нужно ли требовать проверки переполнений в ран-тайм. Хотя я склонен был бы закручивать все гайки, но тут может оказаться геморрой. Не знаю.

От приложений зависит. В некритических областях, не связанных с человеческими жизними это переполнение - пофигу.
Ну возникнет ошибка, ну исправят...
Правда, при расчете зарплаты - это тоже критично... :mrgreen:

Автор:  igor [ Понедельник, 13 Июль, 2009 15:40 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Всем спасибо за наводочки! Как станет посвободнее со временем буду посмотреть :)
Info21 писал(а):
В смысле сомнительно, нужно ли требовать проверки переполнений в ран-тайм.
Думаю, что имеет смысл включать эти проверки во время тестовых прогонов на заключительном этапе работы над проектом, перед выпуском программного продукта. Убедиться, что всё нормально, ну а Release делать уже без них.

Автор:  Евгений Темиргалеев [ Понедельник, 13 Июль, 2009 16:28 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Можно отдельные особо критичные модули всегда компилировать с полными проверками.

Не доделаная статья в вики касательно опций компиляции: http://oberoncore.ru/wiki/blackbox/%D1% ... 1%80%D0%B0

Автор:  igor [ Понедельник, 13 Июль, 2009 16:48 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Евгений Темиргалеев писал(а):
Можно отдельные особо критичные модули всегда компилировать с полными проверками.
... используя, например, функцию DevCompiler.CompileOpt(). :wink: Для включения всех проверок служит метасимвол "+".

Автор:  Евгений Темиргалеев [ Вторник, 14 Июль, 2009 08:55 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Или, что более удобно, DevCompiler.CompileThis {Модуль[опции]}. Символы опций посмотреть в CompileOpt, там виднее всего... igor, раз Вы этим вопросом интересуетесь, не хотите принять участие в улучшении статьи в вики (см http://oberoncore.ru/wiki/about)?

Автор:  igor [ Вторник, 14 Июль, 2009 16:01 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

igor писал(а):
... Блэкбокс эти проверки не проходит уже при запуске. Либо сами проверки выполняются некорректно.
Похоже, что мы имеем дело со вторым случаем. То есть ошибка относится к классу "Ложная тревога".

Попутно обнаружил ещё одну ошибочку, которую можно отнести к классу "Пропуск аварии", а это считается посерьёзнее. Глаза резанул следующий фрагмент кода в модуле DevCPC486:
Код:
                  ELSIF f = Char8 THEN Check(y, 0, 255); FreeHi(y)
                  ELSIF f = Char16 THEN Check(y, 0, 65536); FreeHi(y)
Понятно, что в одном из двух вызовов функции Check() верхняя граница диапазона указана неправильно. Для того чтобы выяснить в каком именно, находим нужную строчку в теле процедуры Check():
Код:
            DevCPL486.GenAssert(ccBE, ranTrap)
Как видим проверяется условие ccBE (меньше или равно), значит фактический параметр 255 указан правильно, а вместо 65536 следует писать 65535. Эта ошибка имеет два вхождения в указанном модуле.

Автор:  igor [ Вторник, 14 Июль, 2009 16:24 ]
Заголовок сообщения:  Re: Перекомпиляция Блэкбокс со всеми проверками

Евгений Темиргалеев писал(а):
igor, раз Вы этим вопросом интересуетесь, не хотите принять участие в улучшении статьи в вики
Отписал в личку :wink:

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/