77725.fb2
26 ноября 2008, 12:45. рейтинг: 1295
Работаю программистом по автоматизации производства. Есть большой проект, который уже несколько лет хорошо и стабильно работает, но в него регулярно нужно вносить небольшие изменения в связи с модернизацией оборудования. И был в свое время у меня помошник, в образовании которого есть ряд существенных пробелов.
Итак, одно из таких изменений было внесено и шел процесс финального тестиро вания на экспериментальном стенде – все отлично, все работает и радует глаз. И тут понадобилось мне отлучиться. Прихожу – оборудование стоит, никаких аварийных сообщений нет. Ненормально и совершенно непригодно для реальной эксплуатации. Пробую еще несколько раз: оборудование останавливается в произвольные моменты времени без всяких на то причин! А надо сказать, что проект сделан в среде Ult raLogik, у которой с возможностями отладки большие проблемы. Поэтому самый верный способ поиска ошибок – это медленное и вдумчивое курение исходников. И вот при очередной итерации этого увлекательного процесса я обнаруживаю следующую проце дуру, написанную моим горе-помошником.
procedure FBDBLOCK(var Input: integer;
var FromValue : integer;
var ToValue : integer;
var Output : boolean);
var
prevvalue: integer;
begin
Output:=false;
if (Input=ToValue) and (prevvalue=FromValue) then Output:=true;
prevvalue:=Input;
end;
Фанфары, мат и желание дать в репу! У него оборудование выключается, когда на систему снизойдёт вселенская благодать и случайное значение неинициализиро ванной переменной совпадёт с нужным!
Хорошо, что это был первый раз, когда эта процедура реально использовалась.