> -- Info21 писал(а):
> Это разврат мозга на уровне импринтинга.
Чтобы диагностировать чужой мозг, нужна уверенность в корректности своегоМожет быть, в школе уместно умолчать про отладчик. И конечно, аскетизм имеет смысл. Но в профессиональном использовании человек без отладчика обладает, уж простите, пониженной конкурентоспособностью. А можно сказать и "ограниченно профпригоден".

Отладчик - это просто инструмент, у него есть своя область применения.

Я не знаю, какова ваша мотивация отвержения отладчика, но мне известно такое изречение на эту тему: "если тебе нужен отладчик, значит, ты не понимаешь, как работает твой код".

С этим мнением есть две проблемы:

1. Подразумевается, что не понимать - это позорно.
2. Подразумевается, что код - мой.

Может быть, в школе это так. Но школа - это первый этап становления ИТ-профессионалов. А в индустрии расклад другой:

1. Код принципиально непостижим, его можно понять лишь местами и временами.
2. Код, скорее всего, не мой.
3. Иногда исходников вообще нет и, соответственно, нет даже объекта понимания.
4. Документация может не соответствовать действительности.
5. Чужой код может содержать ошибки.

Код постижим лишь локально, потому что в условиях работы профессионала кода просто-напросто слишком много, а время ограничено. Кроме того, ряд тонких ошибок (в т.ч. и в чужом коде, который я вызываю), может приводить к тому, что мой код работает не так, как он должен работать, исходя из его записи. Уже давно показано, что нет защиты от ошибок даже в простейших программах, типа сортировки массивов. Заявление кого-либо, что он может контролировать и "понимать" чужой код объёмом в сотни тысяч строк - это не более, чем безответственное бахвальство.

Поскольку документация и чужие модули содержат ошибки, а исходные тексты не всегда недоступны, алгоритм "прочитай код, прочитай документацию, пойми что не так и исправь", вообще говоря, не работает. Иногда может работать, но специалист должен быть готов к тому, что он не сработает. В этой ситуации остаётся изучать поведение живой программы, т.е. отладка.

И здесь отладчик является необходимым инструментом.

Есть ещё такое мнение: "можно отлаживаться логгированием или трассировкой, да и вообще отладку нужно заменять контрактами". На самом же деле, контракты нельзя применить, пока нет понимания, каковы они. В случае старого чужого кода это уже поздно. Отладка логгированием и трассировкой - это частные случаи отладки, их может делать отладчик, причём зачастую отладчик позволяет сделать то же самое на порядок-два удобнее. В конце-то концов вывод в лог реализуется через брекпойнт с действием "напечатай", но в отладчике его можно ставить без перезапуска и пересборки программы, а это важно.

Далее, некоторые виды ошибок почти невозможно локализовать без отладчика. Например, повреждение памяти, когда кто-то незаконно пишет в мой объект и портит его. Искать эту ошибку чтением исходников - обычно задача просто нереально сложная. Точки останова на записи в память позволяют найти эту ошибку быстро и зачастую это единственный способ вообще найти эту ошибку. Поскольку установка ограды на льва в пустыне путём модификации исходных текстов программы переносит точку повреждения на другой объект или на другое время. Лев телепортируется.

Далее, недавно я узнал об отладке процессоров. Оказывается, их вообще нельзя отлаживать печатью. Поскольку печать - это системный вызов, который кардинально меняет весь процесс работы. То же можно сказать и про оптимизированный код. Вставка печати приведёт к тому, что код скомпилируется по-другому. Ошибка в оптимизаторе ускользнёт.

Не хотел бы спорить об этом, но я чувствую, что уже пора писать статью. Слишком много встречаю людей, которые высокомерно фыркают на отладчики. Это какой-то массово распространённый миф.

Для самоконтроля вы можете задаться вопросом: какие были самые большие программы с самой маленькой долей вашего кода, которые вам приходилось править? У меня это была программа из 500000 строк на лиспе, где моего кода было 0. Я кое-что сумел исправить, и без отладчика мне пришлось бы ооочень туго.