Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Иногда падает с ошибкой

Страниц (4): [1] 2 3 4 »
 

1. JSinx - 17 Ноября, 2017 - 00:42:09 - перейти к сообщению
Написал бота, все работает, но иногда может падать с неожиданной ошибкой.
Может иногда несколько дней проработать без ошибки, а может за день несколько вылезти.

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

Но недавно потребовалось внести правку в бота, очень мелкую - но программа снова стала падать.

Сложно сказать в каком месте ошибка, но в сообщение об ошибке срабатывает условие
CODE:
if (aaa = 'место') {.....}
и потом случайная строчка кода.

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

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


Для меня это очень критичный баг, т.к. остановка бота приводит к потерям финансовым и репутации Голливудская улыбка. Писать бота, который будет контролировать первого бота не очень охота.
2. Kibor - 17 Ноября, 2017 - 01:42:18 - перейти к сообщению
aaa = 'место'

aaa это string тип?
текст в двойных кавычках должен быть.
char в одинарных

aaa = "место"

================

Дальше...

if (aaa = 'место') это сравнение.
Сравнивается так ==
Одно = присваивание.

Короче две ошибки в 3 словах.
3. Zireael - 17 Ноября, 2017 - 03:08:34 - перейти к сообщению
CODE:
string aaa = "место";
if (aaa == "место") {messagebox("код");}
4. JSinx - 17 Ноября, 2017 - 03:10:47 - перейти к сообщению
Раз буквально так воспринимается пример строки, который был просто как пример, чтобы понять где не работает, приложу кусок кода:

PHP:

CREATE_TIMER(2, 1501)
{
if (cur_place == "town")
{
log("in town");

if (cur_status == "attack") { at_count++; }

// тут еще есть какой то код
}
}

(Добавление)
хоть один человек прочитал вообще в чем ошибка, или все увидели строку пример, которую я просто набрал как пример, и стали уже отвечать?
(Добавление)
и получается что если я напишу вот так
CODE:

if (aaa = 'место') {}


то код бота будет выполняться, но иногда вдруг падать?
5. Kibor - 17 Ноября, 2017 - 03:21:22 - перейти к сообщению
 JSinx пишет:
Раз буквально так воспринимается пример строки, который был просто как пример, чтобы понять где не работает, приложу кусок кода:


Не понял Не понял
А как воспринимать код когда спрашивают о ошибке? Это вообще то не свободное творчество, а жесткие правила программирования.

 JSinx пишет:
и получается что если я напишу вот так
CODE:

if (aaa = 'место') {}


то код бота будет выполняться, но иногда вдруг падать?

Ага
Этот падает с этим "примерным выкладывание кода"
CODE:
string aaa="место";
int e;
int t[1];
if (aaa = 'место') {e=0;}
t[e]=5;
messagebox (t[e]);

Этот нет
CODE:
string aaa="место";
int e;
int t[1];
if (aaa == "место") {e=0;}
t[e]=5;
messagebox (t[e]);

(Добавление)
С таймерами надо быть аккуратным.

Дело в том, что таймер может выполниться в любое время (то есть когда ему придет время) и вклинить свое выполнение между любыми участками кода. Поэтому для таймера желательно использовать переменные и даже функции которые не используются в скрипте.

Пример неправильного программирования:
CODE:
int at_count=0;
int b[1];
string cur_status="attack";
enabletimer(0);

loop()
{
at_count=0;
//если вызов таймера будет тут, то at_count увеличится на 1 и будет 1
// а b массив на один элемент и получится что в следующей строке будет вылазить за пределы выделенной памяти.
b[at_count]=5;
}




CREATE_TIMER(0, 10)
{

if (cur_status == "attack") { at_count++; }

}
6. JSinx - 17 Ноября, 2017 - 03:37:35 - перейти к сообщению
Все таки хочется вернуться в более конструктивное русло и обсудить, почему может возникать ошибка.

Опишу еще раз.

Был написан код, постепенно который усложнялся. В какой то момент стал падать во время работы. Может проработать 1 час, может 5 часов.

100% было понятно, что падает в таймере, т.к. в нем было это условие. В итоге 1 таймер разбил на 2, падать перестало. Собрал версию в exe, отдал знакомым - месяца 2 ни единой ошибки, до этого обычно раз в 2-3 для ошибка была.

в новой версии был добавлен поиск одной картинки + были подтянуты обновление клиента.
Собрал версию, стало падать с ошибкой опять.
7. Kibor - 17 Ноября, 2017 - 03:44:33 - перейти к сообщению
 JSinx пишет:
вернуться в более конструктивное русло

Что то в ответе выше не конструктивно?
Тем более на основе данной информации?
8. JSinx - 17 Ноября, 2017 - 03:46:08 - перейти к сообщению
Последнее сообщение об ошибке примерно такое:

 Цитата:

Ошибка в:
"town" == "town" goto1443="Берем меч"


Текст "Берем меч" - встречается в одном месте и это запись в логфайл.
Обычно там ссылки на другие места, просто в этот раз упало в этом месте.
(Добавление)
 Kibor пишет:
 JSinx пишет:
вернуться в более конструктивное русло

Что то в ответе выше не конструктивно?
Тем более на основе данной информации?


Ответ был дополнен, пока я писал свой Улыбка
9. Kibor - 17 Ноября, 2017 - 03:55:27 - перейти к сообщению
 JSinx пишет:
Последнее сообщение об ошибке примерно такое:

Цитата:

Ошибка в:
"town" == "town" goto1443="Берем меч"

Это ошибка синтаксиса.
Проверьте точки с запятыми и {}
10. JSinx - 17 Ноября, 2017 - 03:59:02 - перейти к сообщению
непросто это будет сделать в 2000+ строках.
(Добавление)
можно как-то включить более подробный трейс?

Powered by ExBB FM 1.0 Final