Каждый раз когда в скрипте случается ошибка, приходится останавливать скрипт через сервисы, и по новому его запускать. Возможно ли как-то сделать так, что бы выпала ошибка - обычно ее смотрю в окне "Доступные скрипты", отредактировал скрипт и он перезапустился или продолжил работу дальше?
s_mike@rambler.ru написал: Что мешает написать такой скрипт самому? Все средства для этого есть.
У меня получилось это сделать только для включаемых фаллов - пример:
Код
-- Alert
local callResult, result = pcall(dofile, getScriptPath().."\\Script.lua")
if callResult then
-- все в порядке, result это то, что вернула функция dofile
else
-- result это сообщение об ошибке
message(tostring(result));
sleep(5000);
end;
s_mike@rambler.ru написал: Что мешает написать такой скрипт самому? Все средства для этого есть.
У меня получилось это сделать только для включаемых фаллов - пример:
Код
-- Alert
local callResult, result = pcall(dofile, getScriptPath () .. "\\Script.lua")
if callResult then
-- все в порядке, result это то, что вернула функция dofile
else
-- result это сообщение об ошибке
message (tostring(result));
sleep ( 5000 );
end ;
Вы защитили только непосредственно тело включаемого скрипта, если он создаст какие-то функции и вы их потом вызовете из мейна например и будет ошибка в этой функции, она точно так же пролетит до квика. Заворачивать в pcall надо мейн и все колбеки, то есть ловить ошибки на границе с квиком. Ошибка при загрузке скрипта (типа синтаксической ошибки или не загрузилась длл) лучше вообще не ловить, пусть рушится, на этом этапе еще безопасно.
Anton написал: Вы защитили только непосредственно тело включаемого скрипта, если он создаст какие-то функции и вы их потом вызовете из мейна например и будет ошибка в этой функции, она точно так же пролетит до квика. Заворачивать в pcall надо мейн и все колбеки, то есть ловить ошибки на границе с квиком. Ошибка при загрузке скрипта (типа синтаксической ошибки или не загрузилась длл) лучше вообще не ловить, пусть рушится, на этом этапе еще безопасно.
Поясню что мне не очень удобно. Когда скрипт падает - речь про весь скрипт, а не про те куски кода что обернул в dofile() - мне приходится закрывать созданную таблицу, снова открывать сервис, запускать скрипт, он создает таблицу, выравнивать ее, перемещать. Хотелось бы что бы исправил ошибку в файле Lua и он продолжил работу скажем через секунду.
Иван написал: мне приходится закрывать созданную таблицу
Вот для этого и нужно ошибки на границе ловить, чтобы подчистить за скриптом все им созданное. Для этого в луа есть метаметоды __gc, но в квике при ошибке они не работают, баг пока еще не поправили. Поэтому придется извращаться с ловлей ошибок pcall'ом. Что же касается автоматического перезапуска, что-то мне не думается, что это здравая идея. Запустите вы скрипт тестировать одним контрактом и уйдете, он купит контракт - рухнет, перезапустится через секунду, купит еще один - рухнет, и так на все плечи. Лет 15 назад у меня еще из старого велса так скрипт потестировался. Благо в плюс по итогу, а могло бы и не в плюс. Если скрипт упал, то пусть лежит уже до выяснения причины, это не есть один из допустимых сценариев его работы.
Иван написал: мне приходится закрывать созданную таблицу
Вот для этого и нужно ошибки на границе ловить, чтобы подчистить за скриптом все им созданное. Для этого в луа есть метаметоды __gc, но в квике при ошибке они не работают, баг пока еще не поправили. Поэтому придется извращаться с ловлей ошибок pcall'ом. Что же касается автоматического перезапуска, что-то мне не думается, что это здравая идея. Запустите вы скрипт тестировать одним контрактом и уйдете, он купит контракт - рухнет, перезапустится через секунду, купит еще один - рухнет, и так на все плечи. Лет 15 назад у меня еще из старого велса так скрипт потестировался. Благо в плюс по итогу, а могло бы и не в плюс. Если скрипт упал, то пусть лежит уже до выяснения причины, это не есть один из допустимых сценариев его работы.