Показать сообщение отдельно
Старый 30.10.2009, 10:12   #215
Troll
Супер-Модератор
 
Аватар для Troll
 
Регистрация: 26.04.2006
Адрес: Удомля
Сообщений: 1,454
Вы сказали Спасибо: 70
Поблагодарили 536 раз(а) в 332 сообщениях
Отправить сообщение для Troll с помощью ICQ
По умолчанию

#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
Troll вне форума