Обработка ошибок в MP2.0.2
Вложений: 1
Всем известно, что в случае runtime-ошибки в коде (например, неверное имя файла) MP наглухо зависает, не указывая, какая ошибка произошла.
Похоже, я нашел костыльное, но рабочее решение. Вероятно, в новых версиях данную багу (или фичу?) уже пофиксили, но... Лично мне больше нравится 2.0.2. Так что, данная заметка для тех, кто все еще пользуется старой версией. Разработчики поступили следующим образом: Каждая процедура или функция (в том числе код главного модуля) выдает exception, который перебрасывается далее, в метод M.run(). Этот метод не перебрасывает исключение далее, а обрабатывает его. Точнее, он его "ловит", но никак не обрабатывает. Идея состоит в том, чтобы заменить код обработки исключения на свой, и в случае какой-либо ошибки выводить сообщение с информацией об ошибке. Проблема в том, что основной код находится в том же классе, что и метод run(). Поэтому, я придумал следующий костыль. Добавляем в проект модуль mainunit, в нем процедуру main (примерно, как в Си). Теперь весь код, который мы писали бы в файле проекта, будем писать в этом модуле. процедура main будет заменять главный блок begin...end. В главном модуле не пишем ничего. Теперь можно спокойно заменить класс M.class на "пропатченный" (например, с помощью MPExt). Описание немного сумбурное, но пока непонятно, будет ли это кому-то интересно. Если будет интересно, буду ковырять дальше (в планах разработка мастера создания проектов под такую концепцию и раскуривание других возможных профитов от патча M.class). На данный момент сообщения об ошибках выводятся через стандартный Alert. Прилагаю тестовый файл M.class и проект. Главный вопрос: это кому-нибудь интересно (или все уже перешли на новые версии)? |
Ответ: Обработка ошибок в MP2.0.2
|
Часовой пояс GMT +4, время: 23:16. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot