bash.im ithappens.me zadolba.li
1383

Счастливой отладки!

29 октября 2009, 09:00

Однажды мне довелось «подхватывать» проект на C++, оставшийся от одного программиста, уволенного несправедливо (по его личному мнению). Впрочем, проект был почти завершён, и мне оставалось лишь немного дописать интерфейс, провести тестирование, отладку и сдать всё заказчику.

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

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

Дома первым делом в надежде на чудо запускаю экзешник — вылетает, сволочь. Ладно, запускаю полную компиляцию и иду чистить картошку. Возвращаюсь — ошибка!

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

#include <cfdc.h>

Гугление результата не даёт; просто комментирую эту строку и компилирую заново — успешно! Запускаю — программа работает как часы.

Придя в понедельник на работу, первым делом я решил глянуть, что же это за таинственная библиотека. Код её оказался настолько же лаконичным, насколько садистским:

#ifndef CFDC_H
#define CFDC_H

#include <cstdlib>
#include <exceptio.h>

#define return if (std::random(1000) < 2) throw std::exception(); else return

//Счастливой отладки!

#endif


Надо ли говорить, что наш проект использовал в одном незначительном месте стандартный генератор случайных чисел, а вызываемый при инициализации std::randomize() успешно заметал любые следы?..