Иллюстрированный самоучитель по практике программирования

Последняя надежда

Что делать, если вы все перепробовали, но ничего не помогает? Может быть, как раз наступило время взять хороший отладчик и пройтись по программе. Если ваша мысленная модель работы программы по какой-то причине попросту не соответствует действительности и вы смотрите в совершенно другом направлении, чем нужно, или же смотрите в правильном направлении, но в упор не видите проблему, то отладчик заставит вас изменить ход мыслей. Такие ошибки в "мысленной модели" наиболее сложны, и помощь со стороны машины здесь бесценна.

Иногда источник непонимания очень прост: неверный приоритет операторов, неверный оператор, выравнивание, не соответствующее действительной структуре программы, или же ошибка области видимости, когда локальная переменная прячет под собой глобальную или же глобальная переменная вторгается в локальную область видимости. Например, программисты часто забывают, что & и | имеют меньший приоритет, чем == и ! =. Они пишут так:

?if (х & 1 == 0)
?….

И не могут понять – почему результат этого выражения – всегда "ложь". Иногда неверное движение пальца при наборе превращает одиночный символ = в двойной и наоборот:

Иллюстрированный самоучитель по практике программирования › Отладка › Последняя надежда

Или после редактирования случайно остается лишний код:

? for (i=0; i < n; i++);
? a[i++] = 0;

Или проблему создает спешка при наборе текста кода:

Иллюстрированный самоучитель по практике программирования › Отладка › Последняя надежда

Иногда ошибка случается из-за неправильного порядка аргументов в вызове процедуры. Если проверка типов не может помочь, например:

memset(p, n, 0); /* записать п нулей в р */?

Вместо:

memset(p, 0, п); /* записать n нулей в р */

То транслятор такой ошибки не обнаружит.

Иногда незаметно для вас что-то изменяется, например глобальные или общие переменные, а вы об этом ничего не знаете, пока какая-нибудь функция не обратится к ним.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.