Цитата |
---|
Александр написал: Квик прибивает скрипт, в итоге после ошибки происходят утечки данных в самописных библиотеках. |
Да, такое было от 8.2 (если не ошибаюсь) и до 8.5 включительно, в 8.6 поправили и из мейна выходит с очисткой. Колбеки надо заворачивать в pcall и при ошибке прибиваться самостоятельно, квик даже теоретически не имеет возможности прибить мейн кроме как через TerminateThread, а это еще хуже, чем игнорировать ошибки в колбеках. Чтобы это дело четко отработать на всех этапах, надо:
1) создать глобальную табличку с метаметодом __gc.
2) ошибку в OnInit ловим pcall'ом и откладываем до мейна (сохраняем хоть в ту же глобальную табличку).
3) все колбеки заворачиваем в pcall, ошибку из любого колбека редиректим в мейн и либо ставим глобальный флаг "игнорировать колбеки", либо заменяем их все на заглушки.
4) в мейне первым делом проверяем, не было ли ошибки в OnInit (сохранена в п.2), если была - бросаем ее же снова уже из мейна.
5) далее у меня почти всегда цикл сообщений, иногда ожидание на объектах, так что как редиректить ошибку из колбека проблемы нет; по получении ошибки опять же просто кидаем ее снова уже из мейна.
6) ну и зачистка в __gc из п.1 всегда одна и та же, хоть там ошибка, хоть там нормальное завершение.