Ошибки компиляции



  • Необходимо вывести в лог все возникающие ошибки компиляции проекта чтобы можно было отловить их. Сейчас если допустить в проекте какую то ошибку он просто наглухо вешает движок... и выискивать ошибку становится крайне проблематично :(



  • @qwaros said in Ошибки компиляции:

    если допустить в проекте какую то ошибку он просто наглухо вешает движок

    Приведите пример ситуации.



  • @fox http://recordit.co/nQX2IF2boD При этом тот же проект с теми же настрйоками нормально отрабатывает в режиме записи



  • @Qwaros А причём здесь компиляция?



  • @fox при том что в режиме записи скрипт отрабатывает нормально. следовательно проблема в скрипте при его компиляции.... могу ошибаться не особо шарю :)



  • имеется в виду компиляция самого скрипта для выполнения а не вота сборка в папку названная компиляцией в софте



  • @qwaros said in Ошибки компиляции:

    имеется в виду компиляция самого скрипта для выполнения а не вота сборка в папку названная компиляцией в софте

    Для "запуска" скрипт не компилируется, он запускается сразу. Это в режиме "записи" интерпретатор выполняет действия по очереди каждый раз возвращаясь в визуальный конструктор.

    Вы откройте консоль в браузере и выполните код

    while(true)console.log("hi")
    

    Вкладка у вас почти сразу зависнет, но ошибки в коде ни какой нет, зато есть логическая ошибка бесконечного цикла. Тоже самое и в BAS, что конкретно нужно отлавливать в ошибках логики скрипта?



  • @fox так вот эти самые ошибки. Т.к код скрипта бас похож больше на кашу чем на код то в нем искать ошибку не представляется возможным без изучения всех его примудростей. Если в режиме записи делал много изменений откатиться назад будет так же не реально т.к нет списка изменений и отменить какую то конкретную правку невозможно, только все разом. Если проект большой то перебирать каждое действие в поисках ошибки ну просто здец ))) А если вот как на моем примере нет ниодного действия использующего свойкод а ошибка такая еть то пофиксить ее вообще невозможно, только переписывать заново весь скрипт... крч бред выходит :(

    Для "запуска" скрипт не компилируется, он запускается сразу

    Как это? даже простейший js и тот укажет на карявую строку.... а тут выходит что бас незнает какой код исполняет? чот я не вьезжаю....



  • @qwaros Перечитайте ответ @fox, его пример не вызовет никаких синтаксических ошибок и никто его не подсветит. Повешать движок БАС можно вечным циклом, либо синтаксической ошибкой где-то в начале скрипта при том если вы указали огромное число ошибочных запусков потока. Ну еще бесконечной рекурсие, хотя из нее БАС со временем выйдет с ошибкой переполнения стека.
    Вывод:

    • Никогда не используйте вечные циклы, тоесть цикл типа while(true) использовать можно, но тогда надо ставить условие выхода после n - итераций.
    • Для отладки ставьте небольшое число ошибочных запусков потока


  • @usertrue циклов нет вообще. я терпеть ненавижу зацикливать скрипты из за того что они начинают жрать как еб*тые ))) Вот именно потому и над хоть какой то лог, хотя бы краш лог (мб и есть, подскажите где)



  • И кстати - приведенный @fox пример не подходит к текущей ситауции т.к скрипт не запускается воообще. даже поток не запускается, в скрипте специально поставил первым действием вывод в лог строки но ее нет. следовательно движок падает раньше чем запускается поток... отсюда я и сделал вывод что скрипт компилируется движком перед запуском по аналогии с zp



  • @qwaros Что значит падает? Я привел вам приме ситуации, если будет ошибка в начале скрипта и при этом число ошибочных запусков большим, то он тупо зациклится и не сможет вывести лог



  • @usertrue said in Ошибки компиляции:

    @qwaros Что значит падает? Я привел вам приме ситуации, если будет ошибка в начале скрипта и при этом число ошибочных запусков большим, то он тупо зациклится и не сможет вывести лог

    Пардонте за тугость )) Помогло ограничение неуспешных выполнений отловить ошибку! Но топик все же остается актуальным т.к этого можно избежать вполне -

    alt text

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



  • Хотя наверное даже не так, наверное надо просто как то разделить ошибки выполнения скрипта на две категории - логические - при успешном выполнении логики но неверном результате. экшн fail() и сопсно все остальные при которых скрипт бы падал без перезапуска потоков. Вот :)



  • @qwaros said in Ошибки компиляции:

    @usertrue циклов нет вообще. я терпеть ненавижу зацикливать скрипты из за того что они начинают жрать как еб*тые )))

    Как выяснилось позже цикл всё таки был, в количестве удачных и неудачных выполнений.

    @qwaros said in Ошибки компиляции:

    Но топик все же остается актуальным т.к этого можно избежать вполне

    Да, можно было выставить количество неудачных выполнений 1 и сразу отловить ошибку.

    @qwaros said in Ошибки компиляции:

    Хотя наверное даже не так, наверное надо просто как то разделить ошибки выполнения скрипта на две категории - логические - при успешном выполнении логики но неверном результате. экшн fail() и сопсно все остальные при которых скрипт бы падал без перезапуска потоков. Вот :)

    Спорная ситуация. Пример всё с той же не найденной переменной, если в скрипте есть функция, которая из за условий выполняется редко, то падать поток будет крайне редко. И при вашей логике поток не должен при этом перезапускаться. В итоге скрипт будет работать и дальше, но с меньшим количеством потоков при каждой ошибке.

    Для большинства случаев отлавливания ошибок достаточно действия "игнорирование ошибок" и условия if [[WAS_ERROR]].


    Сомневаюсь, что вы будете со мной солидарны в данном вопросе, по этому скажу сразу. Тема создана в ветке "Запросы функционала" и имеет место быть. Разработчик BAS у нас один - @support , если ему данная тема понравится, он её реализует, в том или ином виде. Остальные сообщения это лишь мнения других участников форума.


Log in to reply
 

  • 1
  • 6
  • 8
  • 2
  • 2
  • 1
  • 5
  • 27