#1383: Счастливой отладки!
Thu, 29 Oct 2009 09:00:01 +0400
Однажды мне довелось «подхватывать» проект на C++, оставшийся от одного программиста, уволенного несправедливо
(по его личному мнению). Впрочем, проект был почти завершён, и мне оставалось лишь немного дописать интерфейс,
провести тестирование, отладку и сдать всё заказчику.
Как обычно, сроки поджимают, а я всё никак не могу разделаться с «ловлей блох»: приложение то работает нормально,
то вдруг начинает глючить и вылетать на ровном месте. Как выяснилось, периодически возникало std::exception, но
отследить, откуда оно бралось, у меня никак не получалось: казалось, что таинственная ошибка присутствует
буквально всюду, при этом появляясь далеко не при каждом запуске.
Вечер пятницы. В понедельник начальство обещало спустить с меня шкуру, если что-то ещё не будет работать.
Скидываю все исходники себе на флешку, хоть это и запрещено (к счастью, лишь на уровне инструкций), и несу домой
в надежде разобраться, что к чему, за чашечкой кофе.
Дома первым делом в надежде на чудо запускаю экзешник — вылетает, сволочь. Ладно, запускаю полную компиляцию
и иду чистить картошку. Возвращаюсь — ошибка!
В конце одного из основных хэдеров проекта, заботливо спрятанная за правый край экрана нужным количеством
табуляторов, красуется неприметная строка:
#include
Гугление результата не даёт; просто комментирую эту строку и компилирую заново — успешно! Запускаю — программа
работает как часы.
Придя в понедельник на работу, первым делом я решил глянуть, что же это за таинственная библиотека. Код её
оказался настолько же лаконичным, насколько садистским:
#ifndef CFDC_H
#define CFDC_H
#include
#include
#define return if (std::random(1000) < 2) throw std::exception(); else return
//Счастливой отладки!
#endif
Надо ли говорить, что наш проект использовал в одном незначительном месте стандартный генератор случайных чисел,
а вызываемый при инициализации std::randomize() успешно заметал любые следы?..
http://ithappens.ru/story/1383