OberonCore https://forum.oberoncore.ru/ |
|
XDS 2.6 beta release https://forum.oberoncore.ru/viewtopic.php?f=30&t=3739 |
Страница 3 из 6 |
Автор: | igor [ Вторник, 03 Январь, 2012 12:04 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
GameHunter писал(а): Processes - стандартный модуль XDS'а. Странно что его у Вас нет... Ясно. На самом деле ничего странного, учитывая вот это:igor писал(а): Из всего пакета XDS я использую только несколько файлов, только те что не обходимы для работы консольных xc.exe и xlink.exe (изредка ещё xlib.exe, и совсем уж никогда his.exe), плюс библиотеки для поддержки WinAPI.
|
Автор: | Александр Ильин [ Вторник, 03 Январь, 2012 13:47 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
igor писал(а): Александр Ильин писал(а): до invalid location я докопался с помощью IDA Pro и XD. Респект и уважуха! :) . А XD что за инструмент, HxD что ли?igor писал(а): Александр Ильин писал(а): Вот знаю я это всё. И что мне теперь со всем этим делать? : ) А вот это "mailto:support@excelsior-usa.com" не помогает решить проблему?Кстати, если в проблемный модуль добавить директиву <* PROCINLINE - *>, то ошибка пропадает сразу же. |
Автор: | GameHunter [ Вторник, 03 Январь, 2012 13:56 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
Александр Ильин, Вы молодец! У меня, признаюсь, нет времени для локализации столь хрупких ошибок. Если Вам удастся минимизировать проект и послать сообщение о баге в excelsior - будет здОрово. |
Автор: | igor [ Вторник, 03 Январь, 2012 14:42 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
igor писал(а): IMHO, начинать нужно с выделения минимального тестового проекта, на котором воспроизводится ошибка. Лучше Вас это никто не сделает. GameHunter писал(а): У меня, признаюсь, нет времени для локализации столь хрупких ошибок. Ну, тут без комментариев... Вся надежда на Александра.
|
Автор: | Александр Ильин [ Вторник, 03 Январь, 2012 14:55 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
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 |
Автор: | Александр Ильин [ Вторник, 03 Январь, 2012 15:03 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
Александр Ильин писал(а): GameHunter писал(а): Пожалуйста, попробуйте разобраться. Что-то я ничего не понимаю... Сделал ошибку в минимизации проекта, решил откатиться в начало. Распаковал Source.rar, запускаю xc =p Example.prj, а оно не компилируется! |
Автор: | Александр Ильин [ Вторник, 03 Январь, 2012 15:18 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
Александр Ильин писал(а): Александр Ильин писал(а): GameHunter писал(а): Пожалуйста, попробуйте разобраться. Что-то я ничего не понимаю... Сделал ошибку в минимизации проекта, решил откатиться в начало. Распаковал Source.rar, запускаю xc =p Example.prj, а оно не компилируется! |
Автор: | igor [ Вторник, 03 Январь, 2012 15:23 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
Александр Ильин писал(а): Понял, в чём дело. Зачем же вы в %Temp% скомпилированные файлы-то складываете? А я у себя подправил lookup'ы в Example.prj Но пока достиг только то, что воспроизвёл ошибку real overflow. |
Автор: | Александр Ильин [ Вторник, 03 Январь, 2012 18:41 ] | ||
Заголовок сообщения: | Re: XDS 2.6 beta release | ||
Для минимизации проекта создал 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 не знаю.
|
Автор: | Александр Ильин [ Среда, 04 Январь, 2012 17:42 ] | ||
Заголовок сообщения: | Re: XDS 2.6 beta release | ||
Минимизировал проект до предела, меньше уже не получается. Проверено: воспроизводится в XDS 2.50, 2.51, 2.60 beta.
|
Автор: | Александр Ильин [ Среда, 04 Январь, 2012 18:08 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
GameHunter писал(а): Если Вам удастся минимизировать проект и послать сообщение о баге в excelsior - будет здОрово. Отправил письмо по адресу support@excelsior-usa.com.
|
Автор: | GameHunter [ Среда, 04 Январь, 2012 18:38 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
Прекрасно. Не возьмёте ли Вы на себя труд по аналогичному отлову real overflow? (Прошу прощения за нахальстао ) Я послал 1-го числа в excelsior пару сообщений о менее важных багах. Пока ответа нет. Может до сих пор празднуют? |
Автор: | Александр Ильин [ Среда, 04 Январь, 2012 19:16 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
GameHunter писал(а): Я послал 1-го числа в excelsior пару сообщений о менее важных багах. Не знаю, потрудятся ли они вообще ответить, ведь мы с вами не платим им за решение проблем.Пока ответа нет. Может до сих пор празднуют? :D В моей теме http://www.excelsior-usa.com/forum/topi ... s-26-beta/ сегодня появились ответы от модератора, значит, не все празднуют. С другой стороны, я не видел ни одного ответа на темы о багах, которые я там создавал, так что может быть, наоборот, именно пока праздники да выходные можно получить хоть какой-то ответ. |
Автор: | Александр Ильин [ Среда, 04 Январь, 2012 19:25 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
GameHunter писал(а): Прекрасно. Ответил личным сообщением.
Не возьмёте ли Вы на себя труд по аналогичному отлову real overflow? (Прошу прощения за нахальстао :oops: ) |
Автор: | Александр Ильин [ Четверг, 05 Январь, 2012 23:51 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
GameHunter писал(а): Не возьмёте ли Вы на себя труд по аналогичному отлову real overflow? Докопался вот до чего: сбой происходит в строке "IF Rnd.Real(COM.rnd[ThrInd])>FMath.exp(-DeltaR*SumNS) THEN", в процедуре dCollisions.Collide, а точнее при вызове FMath.exp.(Прошу прощения за нахальство :oops: ) Параметры при этом такие: 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 правдоподобны или нет? Если нет, то сбой коренится где-то раньше, при их вычислении. |
Автор: | Александр Ильин [ Пятница, 06 Январь, 2012 01:35 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
Александр Ильин писал(а): Теперь важно понять вот что: значения 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 вас чай! |
Автор: | igor [ Пятница, 06 Январь, 2012 08:56 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
GameHunter писал(а): У меня 2 основных режима компиляции: проверочный (со всеми проверками без оптимизации) и рабочий (без проверок с оптимизацией). В проверочном режиме всё работает как и раньше. А вот в рабочем режиме почти сразу появляется floating overflow. Александр Ильин писал(а): Чтобы исправить ошибку, нужно в строке 165 модуля GeneralParticle заменить "PassedDistance:=0;" на "r.PassedDistance:=0;". Мне всё-же остался не ясен один момент. Если ошибка в самой программе, а не в компиляторе, то почему она никак не проявлялась в проверочном режиме (со слов GameHunter'а)?
|
Автор: | Александр Ильин [ Пятница, 06 Январь, 2012 11:22 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
igor писал(а): Мне всё-же остался не ясен один момент. Если ошибка в самой программе, а не в компиляторе, то почему она никак не проявлялась в проверочном режиме (со слов GameHunter'а)? Она и в оптимизированном режиме проявлялась далеко не сразу и, возможно, не при любых входных данных. На первоначальной версии проекта GameHunter'а ошибка вылетает после 391 вызова проблемной процедуры, из них после 7 (седьмого!) прохода по проблемной ветке кода (где опущена инициализация). Это значит, что 6 раз случайные значения используются для вычислений успешно, не вызывая переполнения. Дело в том, что в оптимизированном режиме стек более перемешан, и соседние процедуры имеют больше возможностей влиять друг на друга (оптимизатору разрешено всё, что явно не запретил программист), так что подобные "наводки" сильнее проявляются.Это ещё повезло, что вообще проявилось. А попадались бы значения низкого порядка, и вносили бы ошибку (воспроизводимую!) в вычисления безо всяких переполнений. Так, видимо, и происходит в отладочных режимах. А может быть, в отладочном режиме так получается, что в нужном месте всегда ноль, и поэтому ошибки нет. В любом случае, это случайность. Вот, кстати, есть дополнительная польза от оптимизации. : ) |
Автор: | Евгений Темиргалеев [ Пятница, 06 Январь, 2012 11:34 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
Александр Ильин писал(а): Вот, кстати, есть дополнительная польза от оптимизации. : ) Наверное, тут будет точнее --- есть дополнительная польза от мотивации Александра Ильина пользоваться компилятором XDS
|
Автор: | igor [ Пятница, 06 Январь, 2012 11:41 ] |
Заголовок сообщения: | Re: XDS 2.6 beta release |
igor писал(а): Мне всё-же остался не ясен один момент. Александр, спасибо за разъяснение!
|
Страница 3 из 6 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |