«Призрак в машине» Word 97: крах, который исчезал, стоило на него взглянуть

Microsoft Word 97 баг Cpu Errata Ice бинарный патч theregister.com

Ветеран Microsoft Рэймонд Чен рассказал, как неуловимый баг в Word 97 заставил команду искать мифический ICE-эмулятор и в итоге применить бинарный патч с единственной инструкцией NOP, чтобы спасти релиз от сбоев на процессорах с ошибкой.

Ветеран Microsoft Рэймонд Чен поделился очередной историей у костра — способной вселить страх в сердца инженеров по всему миру: баг, который невозможно воспроизвести в отладчике.

История начинается ближе к концу цикла разработки Word 97, когда в тестовых лабораториях проявился дефект, но исчезал, как только инженеры тянулись к отладчику.

Это сводило с ума. Скрипт мог достаточно стабильно вызывать сбой, но стоило кому-то попытаться его отловить — баг тут же прятался.

Чен вспоминает: «Команда разработчиков очень нервничала, потому что баг, проявляющийся лишь время от времени в лаборатории, будет регулярно возникать в реальных условиях. Но как отлаживать проблему, которая сопротивляется отладке?»

Это кошмар любого разработчика, даже для тех самодовольных типов, которые откидываются на спинку кресла и говорят тестировщикам: «у меня всё работает, чувак». Для таких разработчиков в загробной жизни уготовано особое место.

Поскольку баг отказывался сотрудничать, разговор зашёл об ICE (In-Circuit Emulator — внутрисхемный эмулятор, а не иммиграционная служба), который мог бы заменить процессор и позволить устанавливать точки останова внутри самого эмулируемого чипа.

«Для большинства разработчиков ПО, — говорит Чен, — внутрисхемные эмуляторы существовали только в мифах, и возможность заполучить и использовать его была встречена с таким же восторгом, как у пятилетнего мальчика, узнавшего, что он, возможно, прокатится на пожарной машине».

В конце концов команда сузила проблему до конкретного производителя, а оттуда — до ошибки в CPU (errata). Использовавшийся на тот момент компилятор был обновлён, чтобы обходить проблемную последовательность кода. Однако к тому моменту набор инструментов уже был зафиксирован. Замена компилятора грозила внесением новых, неизвестных багов, поэтому этот вариант отпал.

Решение? Прочесать бинарные файлы в поисках экземпляров кода, которые могли бы вызвать сбой у процессоров. Один такой был найден. «Чтобы избежать появления новых проблем как побочного эффекта исправления, команда решила применить бинарный патч к бинарному файлу, вставив nop  в проблемную последовательность кода».

Word 97 представил множество громких функций. Появились Клиппит (он же Clippy) и Visual Basic for Applications (VBA). А ещё был бинарный патч, созданный решительными инженерами, который получил гораздо меньше внимания. Но без него Word 97 мог бы оказаться весьма нестабильным. ®

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.

В тренде:


Похожие новости: