Kibor , Спасибо за обновление и добавление лога. Однако, не слушаются галочки "Поверх окон", потому что она при запуске и так поверх всех, а при включении/отключении этой функции ничего не происходит. Так же и с "Прокручивать вниз". Надеюсь в скором времени вы это исправите и тогда будет просто класс.
(Добавление)
И предлагаю добавить опцию что-то вроде "очистить лог" или при запуске скрипта очищаться будет или при открытии нового скрипта из файла непосредственно из Kibor
(Добавление)
Я в курсе про виды отладок, но тут если ошибка и программа ее обработала и вывела до того как запустится скрипт, то в лог ничего не запишется и мне почему-то кажется, что это не имеет смысла. НУ смотри если ошибки выводятся в диалог до запуска скрипта, то ошибок следовательно не может быть по мере работы кода.
(Добавление)
Вот если бы не выводил ошибки до запуска скрипта, а запускал его с ошибками, а уже потом по мере работы показывал в логе где ошибка, то было бы чудесно.
51. 007wan - 04 Мая, 2019 - 01:50:10 - перейти к сообщению
52. Zireael - 04 Мая, 2019 - 02:34:51 - перейти к сообщению
Цитата:
Однако, не слушаются галочки "Поверх окон"
Хорошо бы читать всё что написано, а не через строчку:
Цитата:
Нижние кнопки пока не работают.
Цитата:
если ошибки выводятся в диалог до запуска скрипта, то ошибок следовательно не может быть по мере работы кода.
Пример вообще-то приведён, когда скрипт запускается, а потом вылет на findimage.
Цитата:
запускал его с ошибками
Нет смысла запускать скрипт с синтаксическими ошибками, их надо сразу исправлять.
Добавить бы ещё возможность отображать значения переменных, т. е. вместо этого:
Цитата:
textout ( i , x , y , " текст " , 1 )
так:
Цитата:
textout ( i(0) , x(300) , y(500) , " текст " , 1 )
Сразу будет видно, что i = 0, x=300, y=500.
53. 007wan - 04 Мая, 2019 - 02:38:40 - перейти к сообщению
Zireael , Спасибо. Понял.
54. Kibor - 04 Мая, 2019 - 17:27:23 - перейти к сообщению
007wan пишет:
Я в курсе про виды отладок, но тут если ошибка и программа ее обработала и вывела до того как запустится скрипт, то в лог ничего не запишется и мне почему-то кажется, что это не имеет смысла. НУ смотри если ошибки выводятся в диалог до запуска скрипта, то ошибок следовательно не может быть по мере работы кода.
Лог пишется ДО выполнения этой команды.
Кибор на этом этапе еще не выполнил эту команду, а в лог она записывается. А если на этой команде Кибор вылетел, то в логе естественно будет последней строчкой команда которая вызвала вылет.
Zireael пишет:
Добавить бы ещё возможность отображать значения переменных, т. е. вместо этого:
Это проблематично. Так как на самом деле Кибор выполняет совсем другие инструкции. В лог пишется просто код, который сопоставляется с этим набором инструкций. До выполнения их. И там просто нет той информации.
Я конечно думал как сделать такую опцию. Возможно в дальнейшем я придумаю как правильно реализовать просмотр лога конкретно в значениях в переменных.
55. Skycrew - 05 Мая, 2019 - 01:15:17 - перейти к сообщению
Вот этого функционала очень давно н хватало!
Планируешь добавить такую отладку (с логом) для собранных .exe ?
Планируешь добавить такую отладку (с логом) для собранных .exe ?
56. Kibor - 05 Мая, 2019 - 01:18:57 - перейти к сообщению
Skycrew пишет:
Планируешь добавить такую отладку (с логом) для собранных .exe ?
Нет. Незачем тратить ресурсы при работе exe. Отлаживать надо до сборки.
57. Kibor - 05 Мая, 2019 - 09:07:32 - перейти к сообщению
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);}
// не одно и тоже отобразит
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;
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 ( 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++)//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 )
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 цикл
}
{
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
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
if ( n == 5 )
break
58. Kibor - 05 Мая, 2019 - 11:18:08 - перейти к сообщению
Пример отлова ошибки в скрипте.
К примеру скрип с этой темы Поиск окна по неполному названию
Я в нем сделал ошибку в функции
FindWindowEx, указав последний параметр -1, что приведет к краху программы.
Испорченный скрипт. Ошибка обозначена красным:
Приведет к вылету Кибор. В логе последняя строка будет указывать на ошибку:
К примеру скрип с этой темы Поиск окна по неполному названию
Я в нем сделал ошибку в функции
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));
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 )
59. Skycrew - 05 Мая, 2019 - 17:54:56 - перейти к сообщению
Kibor пишет:
Skycrew пишет:
Планируешь добавить такую отладку (с логом) для собранных .exe ?
Нет. Незачем тратить ресурсы при работе exe. Отлаживать надо до сборки.
Допустим работает несколько собранных ботов и случаются ошибки (редко но метко..), хочется знать в чем там дело. И еще если сразу несколько exe-ботов работают в связке, такое в оболочке не сделать(
60. Kibor - 06 Мая, 2019 - 11:31:17 - перейти к сообщению
Обновил программу и Debugger
Возможности:
Логирование работы в реальном времени и Просмотр лога при вылете программы.
Определение строки кода при крахе Кибор.
Установка пауз между выполнением строк кода.
При включение галки Кибор должен сам загрузить Debugger.
Если этого не произошло необходимо скачать Кибор с (для просмотра ссылки Вам необходимо авторизоваться)
Для того что бы убрать нагрузку на процессор можно снять галку Вести лог в реальном времени. После этого можно в любой момент нажать кнопку Показать лог и он выведется.
Все функции работают. Размер окна меняется.
Возможности:
Логирование работы в реальном времени и Просмотр лога при вылете программы.
Определение строки кода при крахе Кибор.
Установка пауз между выполнением строк кода.
При включение галки Кибор должен сам загрузить Debugger.
Если этого не произошло необходимо скачать Кибор с (для просмотра ссылки Вам необходимо авторизоваться)
Для того что бы убрать нагрузку на процессор можно снять галку Вести лог в реальном времени. После этого можно в любой момент нажать кнопку Показать лог и он выведется.
Все функции работают. Размер окна меняется.