Ветеран Microsoft Рэймонд Чен поделился очередной историей у костра — способной вселить страх в сердца инженеров по всему миру: баг, который невозможно воспроизвести в отладчике.
История начинается ближе к концу цикла разработки Word 97, когда в тестовых лабораториях проявился дефект, но исчезал, как только инженеры тянулись к отладчику.
Это сводило с ума. Скрипт мог достаточно стабильно вызывать сбой, но стоило кому-то попытаться его отловить — баг тут же прятался.
Чен вспоминает: «Команда разработчиков очень нервничала, потому что баг, проявляющийся лишь время от времени в лаборатории, будет регулярно возникать в реальных условиях. Но как отлаживать проблему, которая сопротивляется отладке?»
Это кошмар любого разработчика, даже для тех самодовольных типов, которые откидываются на спинку кресла и говорят тестировщикам: «у меня всё работает, чувак». Для таких разработчиков в загробной жизни уготовано особое место.
Поскольку баг отказывался сотрудничать, разговор зашёл об ICE (In-Circuit Emulator — внутрисхемный эмулятор, а не иммиграционная служба), который мог бы заменить процессор и позволить устанавливать точки останова внутри самого эмулируемого чипа.
«Для большинства разработчиков ПО, — говорит Чен, — внутрисхемные эмуляторы существовали только в мифах, и возможность заполучить и использовать его была встречена с таким же восторгом, как у пятилетнего мальчика, узнавшего, что он, возможно, прокатится на пожарной машине».
В конце концов команда сузила проблему до конкретного производителя, а оттуда — до ошибки в CPU (errata). Использовавшийся на тот момент компилятор был обновлён, чтобы обходить проблемную последовательность кода. Однако к тому моменту набор инструментов уже был зафиксирован. Замена компилятора грозила внесением новых, неизвестных багов, поэтому этот вариант отпал.
Решение? Прочесать бинарные файлы в поисках экземпляров кода, которые могли бы вызвать сбой у процессоров. Один такой был найден. «Чтобы избежать появления новых проблем как побочного эффекта исправления, команда решила применить бинарный патч к бинарному файлу, вставив nop в проблемную последовательность кода».
Word 97 представил множество громких функций. Появились Клиппит (он же Clippy) и Visual Basic for Applications (VBA). А ещё был бинарный патч, созданный решительными инженерами, который получил гораздо меньше внимания. Но без него Word 97 мог бы оказаться весьма нестабильным. ®
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Richard Speed




