Продолжение (предшествующие части: первая, вторая, третья и четвертая).
В КБ системного программирования, где я работал до 2001 года, наша команда пыталась создать свою собственную, объектно-ориентированную SCADA-систему (подробнее эту историю я когда-то описывал в белорусской “Компьютерной Газете”). А SCADA – это реальное время, а реальное время – это вообще отдельная песня.
Изначально лично мне реальным временем заниматься не приходилось. Сперва я отвечал за хранение описаний элементов SCADA-проекта (агентов, в нашей тогдашней терминологии) и измерительной информации. Затем за векторный графический редактор. Хотя общее представление о реальном времени все-таки приобрести пришлось. Что и пригодилось, когда мы в 2000-м взялись за разработку кроссплатформенной версии своего SCADA Objectizer-а.
Хорошо, что к тому времени о том, что такое отладчик, я практически и не вспоминал. Поскольку, по моему глубокому убеждению, отладчик и реальное время – вещи совершенно несовместимые. Помню, делал я диспетчер таймерных событий. Заводится, скажем, на каждую секунду по 200 событий. А срабатывают, например, только 195 из них. Или все 200, но одномоментно. Или вообще весь таймер на очередном тике зависает. И как это дело отлаживать? Дебаггером в пошаговом режиме? Если кто-то хочет попробовать – желаю удачи :)
А потом случился вообще апофеоз программирования без отладчика. Повезло нам попасть на очень серьезный проект, понятное дело, рилтаймовый, в котором нужно было все писать под OS-9000. Была такая специализированная ОС реального времени.
Уж не знаю, каким образом эта OS-9000 к заказчику попала, но нам она была передана в самой минимальной комплектации. Базовая версия ОС, какой-то допотопный C++ компилятор + uEmacs в качестве редактора. И пара отксерокопированных толмудов по самой ОС на английском языке (очень поверхностных и бестолковых, как оказалось). Естественно, никаких отладчиков и в помине не было.
Дальше больше. Нам потребовалось принять какое-то архитектурное решение для своей системы. А достаточной технической информации и знаний у нас не было. Поэтому поручили двум людям написать по тестовому примеру. Одному что-то под названием, кажется, trap handler (специальная процедура, запускаемая ОС при обнаружении сбоя в процессе). А второму – этим счастливчиком был я – тестовый драйвер. Под неизвестную систему с минимумом информации на руках. Пришлось написать. :)
А потом, уже в конце года, за несколько дней до приемо-сдаточных испытаний у заказчика, пришлось убить два дня на поиск ошибки в ядре диспетчера нашей системы, которое эпизодически сбоило с самыми невероятными симптомами. Ничего, нашли, исправили.
Вообще, весь тот сумасшедший проект под OS-9000 удалось вытянуть именно за счет того, что у всей команды к тому времени был очень большой опыт работы с “черными ящиками” – когда не имеешь возможности увидеть то, что творится внутри.
Потом я от систем реального времени ушел очень далеко. Да и место работы сменил. Основными платформами для меня стали Windows и Linux. Не было больше экзотических средств разработки – Visual C++ под Windows и GNU C++ под Linux-ом. Тем не менее, отладчиком я все равно не пользовался.
Сначала это было, наверное, из каких-то принципиальных соображений. Вроде того, как в 1992-м я не мог обходиться без отладчика, так в 2001-2003 я не мог пользоваться отладчиком – религия не позволяла: ну как же, я же под OS-9000 реальное время без отладчика запускал, а здесь что, без отладчика не смогу, что ли? :)
Потом все-таки стало приходить понимание, что особой доблести в отрицании отладчика нет. Когда приложение стабильно падает при одних и тех же условиях, почему бы не посмотреть точное место слома в отладчике? Во многих таких случаях он помогает. Хотя и не всегда. Но, когда отладчик не помогает, ничего страшного не происходит. Просто нужно достать из своего арсенала другой инструмент, более мощный :)
Вот такая нехитрая история. Научился я обходится без отладчика, как говорится, не от хорошей жизни. Такие были условия – либо отладчики не были способны в конкретных условиях помогать, либо же их вообще не было. Так что пришлось привыкнуть писать программы без отладчика. И я считаю, что это хорошо. А почему хорошо – об этом подробнее в другой раз.
Продолжение следует.