Что нового

[Ошибки] Способ отлова ошибки, не получается отследить где фриз программы

korvindeson

Новичок
Сообщения
19
Репутация
0
Добрый день, есть беда. Сделал программу, в ней есть бесконечные циклы с условием выхода из них на подобии
Код:
$r=0
While 1=1
	$r=$r+1
	if $r>=100 Then
		$cont = _Deactivate($s)
		$r=0
	EndIf
	if $cont = 1 Then ExitLoop
	if PixelGetColor (103, 105, $hWin) = 0x606060 Or PixelGetColor (100, 100, $hWin) = 0x606060 Then
		Sleep(10+$pause)
		ContinueLoop
	EndIf
	if PixelGetColor (103, 105, $hWin) = 0x9D6AC6 Or PixelGetColor (100, 100, $hWin) = 0x9D6AC6 Then ExitLoop
	ControlClick($number, "" ,"[CLASS:Qt5QWindowIcon; INSTANCE:20]", "left",1,102,40)
	Sleep(5+$pause)
WEnd

Получается выход из цикла либо когда пикслель нужного цвета, либо когда $cont = 1. Таких циклов у меня прилично. И сами они в цикле. Беда в том, что на определённом моменте всё виснет, программа не входит в функцию _Deactivate($s)
А теперь самое интересное. Я проверил КАЖДЫЙ цикл в тех условиях, когда всё фризится и каждый выдал нужный результат, вместо остановки работы. Каким образом можно сделать отлов места в когде, который меня подводит?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Для начала попробуйте
Код:
Opt("TrayIconDebug", 1)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А что делает функция _Deactivate($s) ?
И откуда берется $s ?
 
Автор
K

korvindeson

Новичок
Сообщения
19
Репутация
0
InnI сказал(а):
Для начала попробуйте ....
Спасибо, почитаю что такое, спасибо. Чтот инфа по дебагу в аутоит плохо ищется. Или вопросы к гуглу у меня кривые.
C2H5OH сказал(а):
А что делает функция _Deactivate($s) ?
И откуда берется $s ?
_Deactivate($s) - убирает окно, если найдена картинка, запускает новое, обновляет $s (глобальная). Если не найдена каринка ничего не делает.
$s - заголовок окна. Обьявлена как глобальная в самом начале. Обновляется в случае необходимости через _Deactivate($s). Бесконечных WinWait нету, первым делом проверял.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
_Deactivate($s) - убирает окно, если найдена картинка, запускает новое

Я что-то такое и предполагал.
В процессе работы скрипта Вы, видимо, где-то теряете дискриптор окна.
В результате
Код:
PixelGetColor (103, 105, $hWin) = 0x606060

возвращает -1 и скрипт уходит на начало цикла по
Код:
ContinueLoop


По всей видимости Вы теряете окно так, что даже _Deactivate($s) его не находит и не может закрыть, но Вы это трактует так якобы
программа не входит в функцию _Deactivate($s)

Что-то большее предположить по предоставленным обрывкам кода я затрудняюсь. Пробуйте разобраться что куда у Вас пропадает.
 
Автор
K

korvindeson

Новичок
Сообщения
19
Репутация
0
C2H5OH сказал(а):
По всей видимости Вы теряете окно так, что даже _Deactivate($s) его не находит и не может закрыть, но Вы это трактует так якобы
И правда, обновление дескриптора под иф запрятал, поэтому иногна не отрабатывало. Спасибо большое!
Что-то большее предположить по предоставленным обрывкам кода я затрудняюсь. Пробуйте разобраться что куда у Вас пропадает.
Ну, это-то понятно, но не всю тыщю строк-то вываливать.
 
Верх