PDA

Просмотр полной версии : Ошибки синтаксиса OwenLogic в ST функциях вызывают креш.



ReasonX
18.10.2023, 07:41
Версия 2.5.336.0

Воспроизведение:
- Создать ST функцию
- Нарушить синтаксис (я например пытался вмазать выражение в инициализацию переменной).
myvar1 : udint := 1;
myvar2 : udint := 2;
myvar 3: udint := myvar1 + myvar2
- Нажать Enter при вылете окна ошибки
- Повторить ошибку
- Нажать Enter при вылете окна ошибки

Воспроизведение вариант 2:
- var x : udint := 1 + x
- Дожидаемся окна автокомплита
- жмем ESC
- Моментальный вылет

Ошибка происходит так часто, что работать с ST практически не возможно, кроме как панически сохраняясь после каждой строчки.

Вообще сама по себе идея всплывающих окон при ошибке синтаксиса че-то как-то не очень, даже когда не вылетает.

2.5.336.0
System.NotSupportedException: Specified method is not supported.
at Owen.STEditor.Infrastructure.Adapters.Translator.T o(IExpression expression, StType variableType)
at Owen.STEditor.Infrastructure.Adapters.Translator.T o(Variable variable)
at System.Linq.Enumerable.SelectIPartitionIterator`2. PreallocatingToArray(Int32 count)
at System.Linq.Enumerable.SelectIPartitionIterator`2. ToArray()
at STContext.Messages.FunctionBlockTemplate..ctor(Gui d id, IEnumerable`1 inputs, IEnumerable`1 variables, IEnumerable`1 outputs, String name, FunctionBlockDocumentation metaData)
at Owen.STEditor.Infrastructure.Adapters.Translator.T oFunctionBlock(FunctionBlockData data)
at Owen.STEditor.Infrastructure.Adapters.Translator.T o(FunctionBlockData data)
at Owen.STEditor.Infrastructure.Adapters.OutputAdapte r.NotifyOnFunctionBlockChanged(FunctionBlockData functionBlockData)
at Owen.STEditor.ApplicationLayer.CompilationUnitUpda tedEventHandler.<>c__DisplayClass16_0.<NotifyOnFunctionBlockUpdated>b__0()
at Owen.STEditor.ApplicationLayer.CompilationUnitUpda tedEventHandler.<>c.<Handle>b__14_3(Action action)
at Owen.STLanguage.Extensions.ForEach[T](IEnumerable`1 obj, Action`1 action)
at Owen.STEditor.ApplicationLayer.CompilationUnitUpda tedEventHandler.Handle(CompilationUnitUpdatedEvent ev)
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at System.Windows.Threading.ExceptionWrapper.Internal RealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatch When(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.Invok eImpl()
at MS.Internal.CulturePreservingExecutionContext.Call backWrapper(Object obj)
at System.Threading.ExecutionContext.RunInternal(Exec utionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at MS.Internal.CulturePreservingExecutionContext.Run( CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invok e()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(In tPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation( Object o)
at System.Windows.Threading.ExceptionWrapper.Internal RealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatch When(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeIm pl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at Interop.User32.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager. Interop.Mso.IMsoComponentManager.FPushMessageLoop( UIntPtr dwComponentID, msoloop uReason, Void* pvLoopData)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(msoloop reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoop(msoloop reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at ProgramRelayFBD.Program.Main(String[] args)

kondor3000
18.10.2023, 08:10
Версия 2.5.336.0

Вы хотя бы примеры посмотрите и какие отличия, например от Codesys 2.3
https://owen.ru/forum/showthread.php?t=38453&page=10#93
https://owen.ru/forum/showthread.php?t=38239&page=29#285
https://owen.ru/forum/showthread.php?t=38239&page=11#105
https://owen.ru/forum/showthread.php?t=37203

ReasonX
18.10.2023, 08:24
Серьезно считаете что это не доработка ОЛ, а дело вовсе не в кривых руках программиста?

Вы в своем уме? У вас софтина крашется каждые несколько секунд, если печатать не правильно.

ReasonX
18.10.2023, 08:26
Вы хотя бы примеры посмотрите и какие отличия, например от Codesys 2.3
https://owen.ru/forum/showthread.php?t=38453&page=10#93
https://owen.ru/forum/showthread.php?t=38239&page=29#285
https://owen.ru/forum/showthread.php?t=38239&page=11#105
https://owen.ru/forum/showthread.php?t=37203


А причем тут другая IDE?

1exan
18.10.2023, 08:42
Вы в своем уме? У вас софтина крашется каждые несколько секунд, если печатать не правильно.

Крашется - это когда программа закрывается без предупреждения а это просто выдаётся предупреждение.
Доктор, если я тыкаю сюда - у меня болит. Ну так не тыкайте туда!

kondor3000
18.10.2023, 08:48
А причем тут другая IDE?

Каждому надо объяснить, что ST только в разработке, да есть пока проблемы, но программы уже написаны и работают, Так посмотрите и проверьте работу, а потом пишите. И не делайте специально ошибки.

melky
18.10.2023, 08:50
Как минимум должна показываться ошибка, но завернутая в свою оболочку, чтобы можно было продолжать работать с программой. Если речь о программистах. Там вроде эти вещи на исключения делаются...
А когда вываливает исключение и программу приходится закрывать, открывать предыдущий исходник программы это точно недоработка программеров.

ReasonX
18.10.2023, 08:50
Крашется - это когда программа закрывается без предупреждения а это просто выдаётся предупреждение.
Доктор, если я тыкаю сюда - у меня болит. Ну так не тыкайте туда!

Крашется это значит крашется. Краш репорт по вашему откуда?

1exan
18.10.2023, 08:53
Крашется это значит крашется. Краш репорт по вашему откуда?

У меня так (OL2.5.336):
71001

В подробностях текст, OL не закрывается

ReasonX
18.10.2023, 08:55
У меня так (OL2.5.336):
71001

В подробностях текст, OL не закрывается

Попробуйте несколько раз в одной строке. (Я через Enter закрываю)

1exan
18.10.2023, 09:03
Попробуйте несколько раз в одной строке. (Я через Enter закрываю)

Да, если много много всякого навставлять - то иногда вылетает
Но если спросят как такое повторить - точно не отвечу

ReasonX
18.10.2023, 09:14
Для начала давайте разберемся , речь же про ФБ а е функцию как Вы озаглавили тему 71002
Если что то не нравиться, пишите в макросах, ни кто не заставляет использовать именно FB на ST

Никто не заставляет отвечать в не нравящейся вам теме. Пишите в темах, где все хорошо.
Не гадьте. Разводите флейм где-то еще.

ReasonX
18.10.2023, 09:17
Для начала давайте разберемся , речь же про ФБ а е функцию как Вы озаглавили тему 71002
Если что то не нравиться, пишите в макросах, ни кто не заставляет использовать именно FB на ST

Да, поправил заголовок. Ошибка именно в ФБ, воспроизвести в функции не получается.

ReasonX
18.10.2023, 09:27
Да, если много много всякого навставлять - то иногда вылетает
Но если спросят как такое повторить - точно не отвечу

В одной строке допустить ошибки без исправления. Несколько раз и без завершения выражения через ";"
У меня вообще очень стабильно воспроизводиться.

Пишем

- var x : udint := 1 + x
- Дожидаемся окна автокомплита
- жмем ESC
- Моментальный вылет

1exan
18.10.2023, 09:49
В одной строке допустить ошибки без исправления. Несколько раз и без завершения выражения через ";"
У меня вообще очень стабильно воспроизводиться.

Пишем

- var x : udint := 1 + x
- Дожидаемся окна автокомплита
- жмем ESC
- Моментальный вылет

Да, если набирать текст, то вылетает. Я до этого копировал-вставлял.

Ну, если проблема обнаружена, то можно сказать наполовину решена

ReasonX
18.10.2023, 09:54
Да, если набирать текст, то вылетает. Я до этого копировал-вставлял.

Ну, если проблема обнаружена, то можно сказать наполовину решена

Ну и ладненько. Мое дело - зарепортить.

1exan
18.10.2023, 12:24
Ну и ладненько. Мое дело - зарепортить.

Да, хорошо бы ещё чтобы это увидел тот кто надо

Samel
18.10.2023, 13:29
А еще можно наблюдать такое сообщение:
71016
При объявлении переменных не успеваешь выбрать из списка автоподстановки.
Бесит, просто жуть!

kondor3000
18.10.2023, 13:30
В одной строке допустить ошибки без исправления. Несколько раз и без завершения выражения через ";"
У меня вообще очень стабильно воспроизводиться.

Пишем

- var x : udint := 1 + x
- Дожидаемся окна автокомплита
- жмем ESC
- Моментальный вылет

В новой версии OWEN Logic_2.5.337 проблема не воспроизводится, но по хорошему, присваивать переменную в переменную, в Объявлении, это не правильно.
Поэтому у меня и не выявлялось такой проблемы.

ReasonX
18.10.2023, 21:09
В новой версии OWEN Logic_2.5.337 проблема не воспроизводится, но по хорошему, присваивать переменную в переменную, в Объявлении, это не правильно.
Поэтому у меня и не выявлялось такой проблемы.

Это все зависит от стиля редактирования текста. Я бывает куски целые правлю перед копирыванием\вырезанием, это может рушить под чистую все правила синтаксиса во время процесса.
Поэтому что что, а текстовый редактор не должен ни крашатся, ни поп-апы о ошибке синтаксиса выдавать. В консоль, в лог или куда еще - сколько душе угодно, поп-ап это наикривейшее решение, но раз оно все в какой-то альфе-бете то конечно простительно. Но не приятно...

ReasonX
18.10.2023, 21:16
В новой версии OWEN Logic_2.5.337 проблема не воспроизводится, но по хорошему, присваивать переменную в переменную, в Объявлении, это не правильно.
Поэтому у меня и не выявлялось такой проблемы.

На 337 не воспроизводиться. Видимо поправлено. Приятное быстродействие, спасибо команде.