007wan |
Отправлено: 04 Мая, 2019 - 09:50:10
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Kibor , Спасибо за обновление и добавление лога. Однако, не слушаются галочки "Поверх окон", потому что она при запуске и так поверх всех, а при включении/отключении этой функции ничего не происходит. Так же и с "Прокручивать вниз". Надеюсь в скором времени вы это исправите и тогда будет просто класс.
(Добавление)
И предлагаю добавить опцию что-то вроде "очистить лог" или при запуске скрипта очищаться будет или при открытии нового скрипта из файла непосредственно из Kibor
(Добавление)
Я в курсе про виды отладок, но тут если ошибка и программа ее обработала и вывела до того как запустится скрипт, то в лог ничего не запишется и мне почему-то кажется, что это не имеет смысла. НУ смотри если ошибки выводятся в диалог до запуска скрипта, то ошибок следовательно не может быть по мере работы кода.
(Добавление)
Вот если бы не выводил ошибки до запуска скрипта, а запускал его с ошибками, а уже потом по мере работы показывал в логе где ошибка, то было бы чудесно. |
|
|
Zireael |
Отправлено: 04 Мая, 2019 - 10:34:51
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Однако, не слушаются галочки "Поверх окон"
Хорошо бы читать всё что написано, а не через строчку:
Цитата: Нижние кнопки пока не работают.
Цитата: если ошибки выводятся в диалог до запуска скрипта, то ошибок следовательно не может быть по мере работы кода.
Пример вообще-то приведён, когда скрипт запускается, а потом вылет на findimage.
Цитата: запускал его с ошибками
Нет смысла запускать скрипт с синтаксическими ошибками, их надо сразу исправлять.
Добавить бы ещё возможность отображать значения переменных, т. е. вместо этого:
Цитата: textout ( i , x , y , " текст " , 1 )
так:
Цитата: textout ( i(0) , x(300) , y(500) , " текст " , 1 )
Сразу будет видно, что i = 0, x=300, y=500. |
|
|
Kibor |
Отправлено: 05 Мая, 2019 - 01:27:23
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
007wan пишет: Я в курсе про виды отладок, но тут если ошибка и программа ее обработала и вывела до того как запустится скрипт, то в лог ничего не запишется и мне почему-то кажется, что это не имеет смысла. НУ смотри если ошибки выводятся в диалог до запуска скрипта, то ошибок следовательно не может быть по мере работы кода.
Лог пишется ДО выполнения этой команды.
Кибор на этом этапе еще не выполнил эту команду, а в лог она записывается. А если на этой команде Кибор вылетел, то в логе естественно будет последней строчкой команда которая вызвала вылет.
Zireael пишет: Добавить бы ещё возможность отображать значения переменных, т. е. вместо этого:
Это проблематично. Так как на самом деле Кибор выполняет совсем другие инструкции. В лог пишется просто код, который сопоставляется с этим набором инструкций. До выполнения их. И там просто нет той информации.
Я конечно думал как сделать такую опцию. Возможно в дальнейшем я придумаю как правильно реализовать просмотр лога конкретно в значениях в переменных. |
|
|
Kibor |
Отправлено: 05 Мая, 2019 - 17:07:32
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Zireael пишет: CODE:
// не одно и тоже отобразит
for(int i=0; i<5; i++)textout(0, 300, 300, format(i), 1);
for(int j=0; j<5; j++){textout(0, 300, 300, format(j), 1);}
Исправил.
Теперь выводит полностью корректно любые циклы.
Такой код
CODE:int e=0;
for (int i=0; i<2; i++) e++;
loop(2) sleep(5);
if (5==2)e=55555;
else e=22222;
Получит такой лог
Цитата: int e = 0
for ( int i = 0 ; i < 2 ; i ++ )
e ++
e ++
loop ( 2 )
sleep ( 5 )
sleep ( 5 )
if ( 5 == 2 )
e = 22222
После for, loop, if и тд. не выводится строка команды, даже если она идет без {}
К примеру в коде
if (5==2)e=55555;
else e=22222;
В лог запишется так
if ( 5 == 2 )
e = 22222
То есть сначала покажет что была проверка или 5==2, а потом условие неправда и покажет что выполнилось то что в else
================
Код
CODE:int e;
for (int n=0; n<5; n++)//2
{
if (n==2)//3
{
for (int n1=0; n1<2; n1++)e=55;
}
}
Лог
Цитата: for ( int n = 0 ; n < 5 ; n ++ )
if ( n == 2 )
if ( n == 2 )
if ( n == 2 )
for ( int n1 = 0 ; n1 < 2 ; n1 ++ )
e = 55
e = 55
if ( n == 2 )
if ( n == 2 )
============================
код
CODE:for (int n=0; n<1000; n++)//2
{
if (n==5)break;//если 6 цикл
}
лог
Цитата: for ( int n = 0 ; n < 1000 ; n ++ )
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
break |
|
|
Kibor |
Отправлено: 05 Мая, 2019 - 19:18:08
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Пример отлова ошибки в скрипте.
К примеру скрип с этой темы Поиск окна по неполному названию
Я в нем сделал ошибку в функции
FindWindowEx, указав последний параметр -1, что приведет к краху программы.
Испорченный скрипт. Ошибка обозначена красным:
Цитата: //подключаем ф-и WinApi
external(INT, "FindWindowEx", "FindWindowExA", "user32.dll");
external(VOID, "GetWindowText", "GetWindowTextA", "user32.dll");
function findprocess (string str)
//прописываем ф-ю. ищет запущенный процесс по неполному названию
//находит первый попавшийся при точном совпадении
//возвращает полное название первого найденного процесса
//чем длиннее будет строка поиска тем больше шанс что найдется нужный процесс
{
char chrstr[256];
strcpy (#chrstr[0], str);
char buffer[512];
int strsize, bufsize;
strsize = size (#chrstr[0]);
string processname = "Процесс не найден"; // что оставить в случае не нахождения
int hWnd = FindWindowEx (0, 0, 0, 0);
int s = 0;
int exitwhile = 0;
while (hWnd != 0 && exitwhile == 0)
{
buffer[0] = formatic (0);
GetWindowText (hWnd, address (#buffer[0]), 512);
bufsize = size (#buffer[0]);
s = 0;
for (int i = 0; i < bufsize - strsize + 1; i++)
{
for (int j = 0; j < strsize; j++)
{
if (chrstr[j] == buffer[i + j]) s++;
else { s = 0; j = strsize; }
}
if (s == strsize)
{
processname = format (#buffer[0]);
i = bufsize;
exitwhile = 1;
}
}
hWnd = FindWindowEx (0, hWnd, 0, -1);
}
return processname;
}
//запускаем
string strinput = input ("Какой процесс искать?");
messagebox (findprocess (strinput));
Приведет к вылету Кибор. В логе последняя строка будет указывать на ошибку:
Цитата: hWnd = FindWindowEx ( 0 , hWnd , 0 , - 1 ) |
|
|
Skycrew |
Отправлено: 06 Мая, 2019 - 01:54:56
|
Мастер
Покинул форум
Сообщений всего: 123
Дата рег-ции: Июль 2014
Репутация: 0
|
Kibor пишет: Skycrew пишет: Планируешь добавить такую отладку (с логом) для собранных .exe ?
Нет. Незачем тратить ресурсы при работе exe. Отлаживать надо до сборки.
Допустим работает несколько собранных ботов и случаются ошибки (редко но метко..), хочется знать в чем там дело. И еще если сразу несколько exe-ботов работают в связке, такое в оболочке не сделать((Отредактировано автором: 06 Мая, 2019 - 01:55:43) |
|
|
|