пятница, 16 июля 2010 г.

[prog.memories] 4-я часть пути к отладчику, с отладчиком и…

Продолжение (вот первая, вторая и третья части).

Где-то в 1995-м меня угораздило вляпаться в разработку собственной объектно-ориентированной БД. Естественно, хотелось сделать все “по взрослому” – чтобы СУБД была кроссплатформенной. Под Windows и OS/2 она затачивалась изначально. Но хотелось большего – Unix-а.

Об Unix-е в то время я имел очень смутное представление. В университете с Unix-ом нас не знакомили (у ребят, которые учились на год старше, был семестр, когда им преподавали Unix на больших машинах – или ЕС-ках, или СМ-ках, а у нас этого курса уже не было). Поэтому мое изучение Unix-а происходило в буквальном смысле “методом тыка” – поспрашивал у знакомых, есть ли у них дистрибутивы каких-нибудь Unix-ов. У одного нашелся CD с RedHat Linux 5-какой-то там. Я взял этот CD, установил с него Linux на рабочий компьютер (наверное, с десятой попытки) и начал разбираться…

Собственно, цели стать Unix-программистом у меня не было. Мне нужно было скомпилировать под Unix-ом свою СУБД и убедиться, что она работает. Поэтому и изучение Linux-а шло именно в этом направлении: сначала освоил man и info, потом g++, ну а с make я уже был знаком. Дело шло довольно быстро и вскоре мои исходники стали компилироваться, а некоторые тесты даже запускаться.

И тут встал вопрос: а как же под Linux-ом, в котором и вменяемой графической оболочки (вроде нынешних KDE и Gnome) тогда не было, отлаживать программу? Знающие люди подсказали магическое имя – GDB. Запустил я его и офигел. Конец XX-го века на дворе, а тут приходится возвращаться к временам MS-DOS 1.0, а то и раньше! :) Меня, на тот момент, убежденного виндузятника, очень сильно напрягала необходимость отлаживаться в тогдашнем GDB. Ведь даже Borland-овский Turbo Debugger времен 1989 года казался намного более совершенным и уж точно гораздо более удобным, чем GDB. В общем, плюнул я на GDB и сколько не программировал с тех пор под разными Linux-ами и прочими Unix-ами, никогда им не пользовался.

Т.о. к 1996-1997 году сложилась интересная ситуация: при работе под Windows можно было свободно пользоваться отладчиком, но особой пользы от него не было; под OS/2 у нас вообще не было отладчика, а под Linux-ом отладчик был, но работать с ним не хотелось.

А тут и следующий технологический вызов подоспел. Те, кому довелось попрограммировать в середине 90-х, наверняка помнят, какой шум был вокруг технологий “клиент-сервер”. Я даже книжицу от Novell-а какую-то приобрел, которая была посвящена разработке клиент-серверных систем (сама книжка бестолковая была, но самое ценное в ней – это примеры кода для разных операционных систем). Ну и на волне всеобщего энтузиазма по поводу клиент-сервера мне захотелось сделать из своей встраиваемой СУБД настоящую клиент-серверную. Чтобы был автономный процесс-сервер, а клиенты подключались к нему по TCP/IP. Ну а раз захотелось, то пришлось сделать.

И вот тут-то проблема отладки всего этого хозяйства – многопоточного сервера СУБД и клиентов, которые могли работать на разных машинах и под разными ОС – встала в полный рост. Например, работает на одной машине под OS/2 сервер БД, к которому подключено три разных Windows-приложения с других машин. При очередном запросе падает сервер, и тут же какой-то из клиентов. За что хвататься, как искать причины? А иногда сервер начинал глючить после обработки нескольких десятков тысяч запросов. А иногда сервер падал после того, как клиент к нему десять раз подключится, выполнит пару тысяч запросов и отключится. Отладчик и в обычной многопоточной программе бесполезен, а уж в таких ситуациях тем более.

Поэтому где-то к 1999-му году я уже полностью излечился от дебаггерной зависимости, приобретенной в годы программирования под MS-DOS. И уже в следующем году это дало очень важные результаты, поскольку довелось прикоснуться к реальному времени и операционной системе OS-9000.

Продолжение следует.

Отправить комментарий