Отладка программы... Если вы программировали для DOS или Windows 3.1x, при этих словах вас должен охватывать ужас. Что обычно происходит, если программа сталкивается с непредсказуемой ситуацией? Приходится перезагружать компьютер с помощью либо трех известных клавиш, либо кнопки Reset (так называемая "холодная перезагрузка"). В среде Windows при этом практически гарантировано появление на диске потерянных кластеров, так что обязательно нужно запустить программу проверки файловой системы (chkdsk или Norton Disk Doctor).
А не хотелось ли вам когда-нибудь просмотреть содержимое памяти после краха программы? Или отладить программу, ни разу не перезагрузившись? Или трассировать системные функции? В действительности все это вполне реально в OS/2.
Почему именно OS/2?
Операционная система OS/2 обладает рядом свойств, полезных при отладке прикладных программ:
В некоторых случаях отладка под управлением OS/2 особенно эффективна. В первую очередь это относится к разработке драйверов. Драйверы обычно модифицируют операционную систему, и чтобы повторно загрузить драйвер (если он не оформлен как COM-файл), требуется перезапустить компьютер. Кроме того, трудно получить управление, находясь в теле драйвера.
Конечно, в DOS можно установить резидентный отладчик и вызывать его из драйвера, имитируя, скажем, нажатие определенной клавиши. Однако таким путем вам не удастся посмотреть на ситуацию как бы со стороны, а вот с OS/2 - качественно написанной системой более высокого уровня - это возможно.
В OS/2 нет необходимости перезагружать компьютер, чтобы протестировать драйвер, достаточно просто перезапустить специально настроенный DOS-сеанс. Для этого скопируйте полноэкранный или оконный DOS-сеанс в отдельную папку (например, это может быть папка для программ и документов, относящихся к данному проекту, т. е. в нашем случае - к разработке драйвера) и настройте его в соответствии с тем окружением, которого требует драйвер. Если, скажем, драйвер должен отлаживаться со специальным файлом AUTOEXEC.BAT, вы задаете путь к этому файлу в окне DOS properties в разделе DOS_AUTOEXEC. Там же в разделе DOS_DEVICE указываете путь к разрабатываемому драйверу. На этом подготовка закончена, и вы можете сколько угодно экспериментировать с DOS-сеансом, не опасаясь краха операционной системы.
Кроме того, OS/2 позволяет отлаживать программы, которые по тем или иным причинам препятствуют нормальной отладке: перехватывают INT 1 или INT 3 либо сбрасывают флаг трассировки. Отладка с помощью обычных средств DOS в этом случае невозможна.
Если при крахе программы требуется перезагрузка (как в случае, когда в системные области DOS занесена некорректная информация), программа, отлаживаемая в среде DOS, уносит с собой "в могилу" массу ценной информации, которая могла бы пролить свет на причину неправильной работы. Если же запускать программу в DOS-сеансе OS/2, становится возможной так называемая "посмертная отладка".
Системный отладчик
Чтобы подглядеть за тем, что происходит с регистрами процессора при загрузке драйвера, или отследить системные вызовы, вам потребуется Системный отладчик (Kernel Debugger) - специальная версия ядра операционной системы OS/2 со встроенным пользовательским интерфейсом. Отладчик увеличивает размер ядра на 80 Кбайт. Взаимодействие пользователя с отлаживаемой программой происходит через COM-порты: по нуль-модемному кабелю либо по модему. Таким способом можно работать с программами, выключающими аппаратные прерывания или перехватывающими INT 3.
Ограничения
Разумеется, возможности даже такой универсальной системы, как OS/2, не безграничны. В частности, трудно отлаживать программы, обращающиеся к оборудованию напрямую, минуя системные прерывания. И если для DOS-программ этого рода проблемы более или менее ограничиваются сложностями отладки, то некорректное прямое обращение к оборудованию программы для OS/2 может привести к зависанию всей системы, а после нескольких перезагрузок - и к нестабильному поведению ОС.
Евгений Лызенко - ведущий инженер компании "ТУКА", e-mail: eug@tuka.msk.ru