metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2006-11-20 11:14 am

Обработка исключений.

Нет ничего полезнее массово встроенных в программу средств диагностики.
В обработчик исключений в программе встроена запись информации о исключении в базу данных (если исключение не касается пропадания соединения с базой, конечно).
Благодаря этому исправил уже штук 5 глюков, в основном связанных с тонкими эффектами, зависящими от последовательности действий пользователей, которые без упорного распланированного многодневного тестирования после разработки фиг найдешь.
Дельфи, конечно, туповат в плане информации об исключениях - без сторонних компонентов, работающих неизвестно как, информации о месте, где произошло исключение, не получишь. А компоненты эти заставляют извращать параметры компиляции, и если в них ошибится - запросто способны начать выдавать такие исключения, что исходные покажутся мелочью. Раскрутка фреймов стека при их отсутствии, например. Или разное поведение при компиляции с пакетами или без.
Но для поиска достаточно адреса, по которому произошла ошибка - заглянуть по нему дизассемблером и почти всегда сразу видно, в чем проблема.

А еще одна вещь, по поводу которой я всегда спорю с [livejournal.com profile] belnetmon - это использование собственных исключений. Во всех своих функциях, на вход которых подаются параметры извне, я все параметры проверяю на валидность - индексы на попадание в диапазон, ссылки на объекты на неравенство nil, при поиске в ассоциативных массивах - наличие ключа в массиве и выкидываю собственное исключение если чего-то не так. В исключение помещается имя класса и метода, где оно произошло, имя и значение параметра вызвавшего ошибку, итд.
Когда в программе 65000 строк кода, написанного за два года, чего-нибудь не сломать при доработке можно, только пользуясь такими методами.

Вот еще бы все тоже самое сделать на сервере баз данных. Но при всем удобстве тамошних языков, они убогие и там хотя бы нужную функциональность написать и заставить работать. Посему весь серверный код надо выкинуть, то бишь перенести на сервер приложений. Заодно от зависимости от вида сервера избавиться можно будет.

[identity profile] yurri.livejournal.com 2006-11-20 11:33 am (UTC)(link)
Nil? Здесь пахнет паскалем!

[identity profile] metaclass.livejournal.com 2006-11-20 11:35 am (UTC)(link)
Это и есть Delphi, я ж написал :)

[identity profile] slonopotamus.livejournal.com 2006-11-20 12:43 pm (UTC)(link)
Нам бы (явщикам) ващи проблемы :)