OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 19:06

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




Начать новую тему Ответить на тему  [ Сообщений: 101 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 12:04 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
GameHunter писал(а):
Processes - стандартный модуль XDS'а. Странно что его у Вас нет...
Ясно. На самом деле ничего странного, учитывая вот это:
igor писал(а):
Из всего пакета XDS я использую только несколько файлов, только те что не обходимы для работы консольных xc.exe и xlink.exe (изредка ещё xlib.exe, и совсем уж никогда his.exe), плюс библиотеки для поддержки WinAPI.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 13:47 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
igor писал(а):
Александр Ильин писал(а):
до invalid location я докопался с помощью IDA Pro и XD.
Респект и уважуха! :) . А XD что за инструмент, HxD что ли?
xd.exe = XDS Debugger. Входит в комплект консольных инструментов XDS, лежит рядом с компилятором xc.exe.
igor писал(а):
Александр Ильин писал(а):
Вот знаю я это всё. И что мне теперь со всем этим делать? : )
А вот это "mailto:support@excelsior-usa.com" не помогает решить проблему?
Пытаюсь минимизировать проект, чтобы воспроизвелось на малом объёме исходников. Частично уже получилось, но ошибка достаточно хрупкая, так как баг проявляется в результате оптимизации, так что зависит от того, как и какие процедуры были заинлайнены.

Кстати, если в проблемный модуль добавить директиву <* PROCINLINE - *>, то ошибка пропадает сразу же.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 13:56 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Александр Ильин, Вы молодец!

У меня, признаюсь, нет времени для локализации столь хрупких ошибок.
Если Вам удастся минимизировать проект и послать сообщение о баге в excelsior - будет здОрово.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 14:42 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
igor писал(а):
IMHO, начинать нужно с выделения минимального тестового проекта, на котором воспроизводится ошибка. Лучше Вас это никто не сделает.
GameHunter писал(а):
У меня, признаюсь, нет времени для локализации столь хрупких ошибок.
Ну, тут без комментариев... Вся надежда на Александра.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 14:55 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
GameHunter писал(а):
Пожалуйста, попробуйте разобраться.
Что-то я ничего не понимаю... Сделал ошибку в минимизации проекта, решил откатиться в начало. Распаковал Source.rar, запускаю xc =p Example.prj, а оно не компилируется!
Код:
>xc =p Example.prj
O2/M2 development system v2.60 TS  (c) 1991-2011 Excelsior, LLC. (build 16.11.2011)
Make project "Example.prj"
#file "Example.prj" (line 385): Compilation mode: Run
XDS Oberon-2 v2.40 [x86, v1.50] - build 16.11.2011
Compiling "Environment\Math2\mCylArea.ob2"

* [Environment\Math2\mCylArea.ob2 48.15 E020]
* undeclared identifier "Init"
    BasicArea.$Init(a,LastZ,LastR,MinZ,MaxZ,-Rad/(2*LastR-1),Rad);

* [Environment\Math2\mCylArea.ob2 56.22 E020]
* undeclared identifier "MinX"
    RETURN BasicArea.$MinX(a)

* [Environment\Math2\mCylArea.ob2 64.22 E020]
* undeclared identifier "MaxX"
    RETURN BasicArea.$MaxX(a)

* [Environment\Math2\mCylArea.ob2 72.22 E020]
* undeclared identifier "MaxY"
    RETURN BasicArea.$MaxY(a)

* [Environment\Math2\mCylArea.ob2 80.22 E020]
* undeclared identifier "MinY"
    RETURN BasicArea.$MinY(a)

* [Environment\Math2\mCylArea.ob2 104.22 E020]
* undeclared identifier "Dx"
    RETURN BasicArea.$Dx(a)

* [Environment\Math2\mCylArea.ob2 112.22 E020]
* undeclared identifier "Dy"
    RETURN BasicArea.$Dy(a)

* [Environment\Math2\mCylArea.ob2 124.22 E020]
* undeclared identifier "IndToX"
    RETURN BasicArea.$IndToX(a,iZ)

* [Environment\Math2\mCylArea.ob2 132.22 E020]
* undeclared identifier "XToInd"
    RETURN BasicArea.$XToInd(a,z);

* [Environment\Math2\mCylArea.ob2 140.22 E020]
* undeclared identifier "IndToY"
    RETURN BasicArea.$IndToY(a,iR)

* [Environment\Math2\mCylArea.ob2 148.22 E020]
* undeclared identifier "YToInd"
    RETURN BasicArea.$YToInd(a,r);

* [Environment\Math2\mCylArea.ob2 163.22 E020]
* undeclared identifier "DiffXInd"
    RETURN BasicArea.$DiffXInd(a,Field,iZ,iR);

* [Environment\Math2\mCylArea.ob2 178.22 E020]
* undeclared identifier "DiffYInd"
    RETURN BasicArea.$DiffYInd(a,Field,iZ,iR);

* [Environment\Math2\mCylArea.ob2 193.22 E020]
* undeclared identifier "Diff2XInd"
    RETURN BasicArea.$Diff2XInd(a,Field,iZ,iR);

* [Environment\Math2\mCylArea.ob2 208.22 E020]
* undeclared identifier "Diff2YInd"
    RETURN BasicArea.$Diff2YInd(a,Field,iZ,iR);

* [Environment\Math2\mCylArea.ob2 320.22 E020]
* undeclared identifier "Interpolate"
    RETURN BasicArea.$Interpolate(a,Field,z,r);

* [Environment\Math2\mCylArea.ob2 336.22 E020]
* undeclared identifier "DiffX"
    RETURN BasicArea.$DiffX(a,Field,z,r);

* [*** 0.00 F437]
* #too many errors
errors 18, no warnings, lines  336, time  0.14


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 15:03 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Александр Ильин писал(а):
GameHunter писал(а):
Пожалуйста, попробуйте разобраться.
Что-то я ничего не понимаю... Сделал ошибку в минимизации проекта, решил откатиться в начало. Распаковал Source.rar, запускаю xc =p Example.prj, а оно не компилируется!
Помогло вот что: >touch Environment\Math2\mBaseArea.ob2


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 15:18 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Александр Ильин писал(а):
Александр Ильин писал(а):
GameHunter писал(а):
Пожалуйста, попробуйте разобраться.
Что-то я ничего не понимаю... Сделал ошибку в минимизации проекта, решил откатиться в начало. Распаковал Source.rar, запускаю xc =p Example.prj, а оно не компилируется!
Помогло вот что: >touch Environment\Math2\mBaseArea.ob2
Понял, в чём дело. Зачем же вы в %Temp% скомпилированные файлы-то складываете?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 15:23 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Александр Ильин писал(а):
Понял, в чём дело. Зачем же вы в %Temp% скомпилированные файлы-то складываете?
А я у себя подправил lookup'ы в Example.prj :)
Но пока достиг только то, что воспроизвёл ошибку real overflow.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Вторник, 03 Январь, 2012 18:41 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Для минимизации проекта создал bat-файлы, проверяющие воспроизводимость бага. Для работы требуются установленные утилиты touch.exe, grep.exe, sed.exe. Запускайте Run.bat, а CheckBug.bat вызывается автоматически.

Как это работает:
- Run.bat компилирует проект и убеждается, что в нужном месте ошибки нет.
- С помощью sed.exe из модуля fDynamicParticle удаляются строки с текстом "Another stupid invalid location in run mode is removed by this".
- Проект компилируется повторно, и Run.bat убеждается, что ошибка появилась в нужном месте.

Чтобы определить, где возникла ошибка (ведь invalid location может появиться где угодно в процессе минимизации проекта), нужное место окружено инструкциями консольного вывода. Если определённый текст в консоли не появился, значит мы не дошли до нужного места, и какая-то новая ошибка приключилась раньше. Если текст появился частично, значит сбой именно там, где мы его ожидаем. Если текст появился полностью, значит мы проскочили это место, и сбой не воспроизвёлся.

В принципе, без sed.exe можно обойтись, если создать два варианта модуля и подставлять нужный.
Как обойтись без grep и touch не знаю.


Вложения:
Комментарий к файлу: Пакетные файлы и поправленный исходник
Source.zip [3.92 КБ]
Скачиваний: 241
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Среда, 04 Январь, 2012 17:42 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Минимизировал проект до предела, меньше уже не получается.
Проверено: воспроизводится в XDS 2.50, 2.51, 2.60 beta.


Вложения:
OptimizerBug.zip [4.26 КБ]
Скачиваний: 244
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Среда, 04 Январь, 2012 18:08 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
GameHunter писал(а):
Если Вам удастся минимизировать проект и послать сообщение о баге в excelsior - будет здОрово.
Отправил письмо по адресу support@excelsior-usa.com.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Среда, 04 Январь, 2012 18:38 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Прекрасно.

Не возьмёте ли Вы на себя труд по аналогичному отлову real overflow?
(Прошу прощения за нахальстао :oops: )

Я послал 1-го числа в excelsior пару сообщений о менее важных багах.
Пока ответа нет.
Может до сих пор празднуют? :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Среда, 04 Январь, 2012 19:16 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
GameHunter писал(а):
Я послал 1-го числа в excelsior пару сообщений о менее важных багах.
Пока ответа нет.
Может до сих пор празднуют? :D
Не знаю, потрудятся ли они вообще ответить, ведь мы с вами не платим им за решение проблем.
В моей теме http://www.excelsior-usa.com/forum/topi ... s-26-beta/ сегодня появились ответы от модератора, значит, не все празднуют. С другой стороны, я не видел ни одного ответа на темы о багах, которые я там создавал, так что может быть, наоборот, именно пока праздники да выходные можно получить хоть какой-то ответ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Среда, 04 Январь, 2012 19:25 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
GameHunter писал(а):
Прекрасно.

Не возьмёте ли Вы на себя труд по аналогичному отлову real overflow?
(Прошу прощения за нахальстао :oops: )
Ответил личным сообщением.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Четверг, 05 Январь, 2012 23:51 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
GameHunter писал(а):
Не возьмёте ли Вы на себя труд по аналогичному отлову real overflow?
(Прошу прощения за нахальство :oops: )
Докопался вот до чего: сбой происходит в строке "IF Rnd.Real(COM.rnd[ThrInd])>FMath.exp(-DeltaR*SumNS) THEN", в процедуре dCollisions.Collide, а точнее при вызове FMath.exp.
Параметры при этом такие:
DeltaR=-6.934029E+0263;
SumNS=4.170243E+0001;
-DeltaR*SumNS=2.891659E+0265;
FMath.exp(-DeltaR*SumNS)=real overflow
(Модуль FMath := LongMath.)
Если я правильно понимаю, то мы пытаемся узнать, сколько будет, если возвести константу e в степень 2.9*10^265, то есть в очень большую степень. В этом смысле переполнение не удивительно.

Теперь важно понять вот что: значения DeltaR и SumNS правдоподобны или нет? Если нет, то сбой коренится где-то раньше, при их вычислении.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Пятница, 06 Январь, 2012 01:35 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Александр Ильин писал(а):
Теперь важно понять вот что: значения DeltaR и SumNS правдоподобны или нет? Если нет, то сбой коренится где-то раньше, при их вычислении.
Нашёл, откуда берётся большое отрицательное значение DeltaR. В процедуре GeneralParticle.Move не всегда инициализируется поле r.PassedDistance.

Самым трудным было локализовать то место, в котором происходит исключение. Это нужно для того, чтобы выйти затем на переменную, принимающую некорректное значение, и найти "вверх по коду" то место, откуда это значение берётся. Трудность локализации в том, что оптимизированный код не содержит отладочной информации о границах процедур (например, многие заинлайнены). Глядишь на место сбоя в дизассемблере, и не понимаешь, какому месту в исходниках это соответствует, даже в каком модуле находишься.

Проблема была в неинициализированной стековой переменной (RECORD), поэтому сама ошибка носила "плавающий" характер в том смысле, что изменения в несвязанных местах кода могли приводить к изменению содержимого стека, и, соответственно, менять значение этой переменной на такое, которое не приводило к переполнению, и ошибка переставала проявляться. Это тоже затрудняло локализацию. Удалил строчку - ошибка пропала. Думаешь, ошибка в этой строчке? Подумай ещё раз. : )

Пришлось добавлять отладочную выдачу, чтобы видеть знакомый текст в дизассемблере, и понимать, где находишься.

Когда место сбоя локализовано в исходниках, остаётся понять, глючит ли кодогенератор, прочитывая не то значение, или в самом деле было не то передано в процедуру. Тут на помощь приходит отладочная выдача вида:
Код:
        IF DeltaR < -6.E+0263 THEN (* here we get a value too small *)
          Out.String('too small! ');
        END;
Если оказывается, что и в самом деле такое некорректное значение было передано, то остаётся найти, откуда оно было получено. Опять же, это может быть сбой в вычислениях, ошибка кодогенерации или, как в данном случае, забытая инициализация.

Чтобы исправить ошибку, нужно в строке 165 модуля GeneralParticle заменить "PassedDistance:=0;" на "r.PassedDistance:=0;".

GameHunter, c вас чай!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Пятница, 06 Январь, 2012 08:56 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
GameHunter писал(а):
У меня 2 основных режима компиляции: проверочный (со всеми проверками без оптимизации) и рабочий (без проверок с оптимизацией). В проверочном режиме всё работает как и раньше. А вот в рабочем режиме почти сразу появляется floating overflow.
Александр Ильин писал(а):
Чтобы исправить ошибку, нужно в строке 165 модуля GeneralParticle заменить "PassedDistance:=0;" на "r.PassedDistance:=0;".
Мне всё-же остался не ясен один момент. Если ошибка в самой программе, а не в компиляторе, то почему она никак не проявлялась в проверочном режиме (со слов GameHunter'а)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Пятница, 06 Январь, 2012 11:22 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
igor писал(а):
Мне всё-же остался не ясен один момент. Если ошибка в самой программе, а не в компиляторе, то почему она никак не проявлялась в проверочном режиме (со слов GameHunter'а)?
Она и в оптимизированном режиме проявлялась далеко не сразу и, возможно, не при любых входных данных. На первоначальной версии проекта GameHunter'а ошибка вылетает после 391 вызова проблемной процедуры, из них после 7 (седьмого!) прохода по проблемной ветке кода (где опущена инициализация). Это значит, что 6 раз случайные значения используются для вычислений успешно, не вызывая переполнения. Дело в том, что в оптимизированном режиме стек более перемешан, и соседние процедуры имеют больше возможностей влиять друг на друга (оптимизатору разрешено всё, что явно не запретил программист), так что подобные "наводки" сильнее проявляются.

Это ещё повезло, что вообще проявилось. А попадались бы значения низкого порядка, и вносили бы ошибку (воспроизводимую!) в вычисления безо всяких переполнений. Так, видимо, и происходит в отладочных режимах. А может быть, в отладочном режиме так получается, что в нужном месте всегда ноль, и поэтому ошибки нет. В любом случае, это случайность.

Вот, кстати, есть дополнительная польза от оптимизации. : )


Последний раз редактировалось Александр Ильин Пятница, 06 Январь, 2012 11:42, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Пятница, 06 Январь, 2012 11:34 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Александр Ильин писал(а):
Вот, кстати, есть дополнительная польза от оптимизации. : )
Наверное, тут будет точнее --- есть дополнительная польза от мотивации Александра Ильина пользоваться компилятором XDS :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: XDS 2.6 beta release
СообщениеДобавлено: Пятница, 06 Январь, 2012 11:41 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
igor писал(а):
Мне всё-же остался не ясен один момент.
Александр, спасибо за разъяснение!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 101 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

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


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

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


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

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