Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Без описания
JSinx
Отправлено: 17 Ноября, 2017 - 08:42:09
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2014  
Репутация: 0




Написал бота, все работает, но иногда может падать с неожиданной ошибкой.
Может иногда несколько дней проработать без ошибки, а может за день несколько вылезти.

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

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

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

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

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


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

(Отредактировано автором: 17 Ноября, 2017 - 08:42:57)

 
 Top
Kibor
Отправлено: 17 Ноября, 2017 - 09:42:18
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




aaa = 'место'

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

aaa = "место"

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

Дальше...

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

Короче две ошибки в 3 словах.
 
 Top
Zireael
Отправлено: 17 Ноября, 2017 - 11:08:34
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




CODE:
string aaa = "место";
if (aaa == "место") {messagebox("код");}
 
 Top
JSinx
Отправлено: 17 Ноября, 2017 - 11:10:47
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2014  
Репутация: 0




Раз буквально так воспринимается пример строки, который был просто как пример, чтобы понять где не работает, приложу кусок кода:

PHP:

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

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

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

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

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


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

(Отредактировано автором: 17 Ноября, 2017 - 11:13:47)

 
 Top
Kibor
Отправлено: 17 Ноября, 2017 - 11:21:22
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 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++; }

}
 
 Top
JSinx
Отправлено: 17 Ноября, 2017 - 11:37:35
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2014  
Репутация: 0




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

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

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

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

в новой версии был добавлен поиск одной картинки + были подтянуты обновление клиента.
Собрал версию, стало падать с ошибкой опять.

(Отредактировано автором: 17 Ноября, 2017 - 11:38:03)

 
 Top
Kibor
Отправлено: 17 Ноября, 2017 - 11:44:33
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 JSinx пишет:
вернуться в более конструктивное русло

Что то в ответе выше не конструктивно?
Тем более на основе данной информации?
 
 Top
JSinx
Отправлено: 17 Ноября, 2017 - 11:46:08
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2014  
Репутация: 0




Последнее сообщение об ошибке примерно такое:

 Цитата:

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


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

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


Ответ был дополнен, пока я писал свой Улыбка
 
 Top
Kibor
Отправлено: 17 Ноября, 2017 - 11:55:27
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 JSinx пишет:
Последнее сообщение об ошибке примерно такое:

Цитата:

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

Это ошибка синтаксиса.
Проверьте точки с запятыми и {}
 
 Top
JSinx
Отправлено: 17 Ноября, 2017 - 11:59:02
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 23
Дата рег-ции: Февр. 2014  
Репутация: 0




непросто это будет сделать в 2000+ строках.
(Добавление)
можно как-то включить более подробный трейс?
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by