непечатаемые символы. Какие еще возможности, хорошо совместимые с 
назначением этой программы, можно реализовать?  
Чужие ошибки 
По правде говоря, большинству программистов не достается удовольствие 
разработки совершенно новой системы с нуля. Вместо этого большую часть времени 
они проводят, используя, поддерживая, изменяя и неизбежно отлаживая код, 
написанный другими людьми. 
При отладке чужого кода остается в силе все, что мы сказали об отладке своего 
собственного кода. Перед тем как начать
, однако, вы сначала должны добиться 
определенного понимания организации программы и хода мысли ее создателей. 
Термин "открытие", использованный в одном очень большом программном проекте, 
является не такой уж плохой метафорой. Задачей является "открыть", что 
происходит в коде, который писали не вы. 
Здесь очень сильно могут помочь инструментальные средства. Программы 
текстового поиска 
типа g rep помогут найти все места использования какого-нибудь 
имени. Перекрестные ссылки дают определенное представление о структуре 
программы. Граф, показывающий взаимные вызовы функций, ценен, если только он 
не очень велик. Пошаговый проход по программе с помощью отладчика поможет 
увидеть последовательность событий. Из истории ревизий программы можно узнать, 
что происходило в ней с
 течением времени. Частые изменения являются знаком 
того, что код был плохо понят или подвергался частой смене требований и поэтому 
потенциально содержит ошибки. 
Иногда вам нужно найти ошибку в программе, которой вы не писали и исходного 
текста которой вы даже не имеете. В этом случае задачей является обнаружение и 
описание ошибки, 
причем так, чтобы вы смогли аккуратно сообщить о ней 
разработчику и в то же время, возможно, найти ее обходное решение. 
Если вам кажется, что вы нашли ошибку в чужой программе, первым шагом следует 
убедиться, что это настоящая ошибка, чтобы не терять ни времени автора, ни 
собственного авторитета. 
Если вы нашли ошибку
 в компиляторе, убедитесь, что это действительно ошибка 
компилятора, а не ошибка в вашем коде. Например, операция побитового сдвига 
вправо заполняет освобождающиеся биты нулем (логический сдвиг) или знаковым 
битом (арифметический сдвиг), а чем именно — в языках С и C++ не указано, 
поэтому новички иногда считают, что если конструкция типа 
? i = -1; printfO 
 
 ? i » 1); 
выдает неожиданный
 результат, то ошибка — в компиляторе. На самом деле это — 
вопрос переносимости, потому что данный оператор имеет право действовать по-
разному на разных системах. Попробуйте проверить различные системы и 
посмотрите, что произойдет; обратитесь к описанию языка, чтобы удостовериться в 
правильной интерпретации результатов. 
Убедитесь, что ошибка не нова. Используете ли вы последнюю 
версию программы. 
Есть ли список исправленных в ней ошибок? Большая часть программного