Критическая ошибка в Word 97 исчезала во время расследования разработчиками
Подробнее
Tecnoblog
tecnoblog.net

Критическая ошибка в Word 97 исчезала во время расследования разработчиками

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

Причина этой проблемы была связана с аппаратным компонентом. По словам Чена, сбой вызывал серьезный сбой и был обнаружен незадолго до официального выпуска Office 97.

Изначально инженеры Microsoft могли воспроизводить дефект, запуская определенный скрипт. Однако при использовании отладчика для изоляции точного участка исходного кода с ошибкой баг переставал проявляться. Это явление известно среди разработчиков как «Heisenbug» (эффект Хайзенберга), аллюзия на физика Вернера Гейзенберга, который постулировал, что наблюдение за системой может изменить ее состояние.

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

Чен сравнил энтузиазм разработчиков по поводу идеи ICE с ощущением пятилетнего ребенка, который обнаруживает, что может ездить на пожарной машине. Тем не менее, это оборудование в итоге оказалось не самым необходимым. Разработчики Microsoft заметили, что большинство затронутых компьютеров поступало от одного производителя. Расследовав эту деталь, они обнаружили, что причиной сбоя был уже известный дефект в конструкции процессоров этих машин.

К счастью, существовала обновленная версия компилятора, используемого в Word 97, которая могла предотвратить ошибку. Сложность заключалась в том, что обновление компилятора в тот момент могло внести новые и серьезные проблемы в Word 97. Таким образом, разработчикам пришлось отследить проблемную последовательность инструкций внутри уже скомпилированного исполняемого файла. Это был сложный процесс, поскольку было выявлено около 150 потенциально виновных случаев.

В конце концов, они пришли к выводу, что только один из этих случаев превышал лимит страницы памяти, что и вызывало проблему. Применение исправления (патча) непосредственно в бинарном файле устранило ошибку, завершив бурный, но удовлетворительный период.

Популярное