Что нового

[Баг] Зависание скрипта при возникновении ошибок

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Если запустить эти два примера, то все будет "хорошо", т.е. SciTE или .exe вывалится с соответствующими ошибками. Но вот заметил такую штуку, по мере увеличения (усложнения) скрипта, программа не вылетает, а просто зависает и висит в памяти до CTRL+ALT+DEL. Причем, все GUI, созданные скриптом исчезают... Естественно, отладка программы в этом случае превращается в задачу не из легких. Кто-нибудь сталкивался с подобным поведением?

:(

Код:
Dim $aData[3][6]

For $i = 0 To 3
	$aData[$i][0] = 0
Next


Код:
$A = 1
$B = 5

$sData = 'Элемент'$A & $B
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Кто-нибудь сталкивался с подобным поведением?
Нечто подобное (связанное с зависанием) я уже замечал. Но баг не постоянный (трудно воспроизвести), поэтому его исправить почти нереально. Мой тикет закрыли после длительного обсуждения и тестнига, и должен заметить, Jpm проявил похвальное терпение к моему тикету прежде чем его закрыть :smile:.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Вообщем, я разобрался. Это связано с GUI, а точнее с тем, что я перехватил обработчик для элемента GUI (ListView) и не вернул предыдущий обработчик во время возникновения ошибки. Хотя, все это вроде как работало без проблем раньше.

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

Код:
#Include <Constants.au3>
#Include <WinAPI.au3>

GUICreate('MyGUI', 400, 400)
GUICtrlCreateListView('Элемент', 10, 10, 380, 380)
$hListView = GUICtrlGetHandle(-1)
$hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
$pDll = DllCallbackGetPtr($hDll)
$hProc = _WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, $pDll)
GUISetState()

;~_WinAPI_SetWindowLong($hListView, $GWL_WNDPROC, $hProc)

$A = $B ; :-)

Func _WinProc($hWnd, $iMsg, $wParam, $lParam)
	Return _WinAPI_CallWindowProc($hProc, $hWnd, $iMsg, $wParam, $lParam)
EndFunc   ;==>_WinProc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
В таком виде скрипт зависнит наглухо, но если снять комментарий, все будет OK
И это помоему баг, и как раз возможно он как то связан с моей проблемой в тикете.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Ну, технически, это возможно и не совсем баг, поскольку я использую "неродные" функции. Хотя... Благо, функции из OnAutoItExitRegister() вызываются до удаления GUI, и зависание легко предотвратить.
 

SyDr

Сидра
Сообщения
651
Репутация
158
У меня обычно скрипт виснет в самом начале :smile: Wrapper тоже иногда виснет. Правда в моём случае убийство процессов помогает. Причём виснут они в самых обычных ситуациях, когда, вроде бы, ничего виснуть не должно.
 
Верх