Я, например, добавляю код отладки (например, операторы print) только когда пытаюсь найти ошибку. И как только я его нашел, я удаляю отладочный код (и добавляю тестовый пример, который специально проверяет эту ошибку). Я чувствую, что он загромождает реальный код и поэтому не имеет места там, если я не отлаживаю.
Как ты это делаешь? Вы оставляете код отладки на месте или удаляете его, если он устарел (о чем может быть трудно судить, когда это так)?
Код, добавленный специально для отладки, должен быть удален из производственного программного обеспечения.
Является ли это полным удалением или помещением в разделы условной компиляции (как в C / C ++ / C #), зависит от вас и вашего стандарта кодирования.
Есть ряд причин для этого:
источник
ChrisF и Alaric имеют действительные баллы; +1 за них. Я могу определить по крайней мере 5 различных типов кода отладки, который я использую.
Использование журналов для сброса состояния системы в определенный момент времени.
Использование логов для выполнения контрольных точек.
Код, который фактически заставляет определенное условие быть верным, но нарушает нормальное поведение. Пример:
Ведение журнала проверки - я бы классифицировал это как подробное ведение журнала, которое можно использовать для проверки правильности программного обеспечения, которое не следует включать в производство, например, для проверки отдельных шагов алгоритма.
Регистрация операций - см . Пост Аларика . Это в значительной степени то, что я имею в виду под «ведением журнала операций».
1, 2 и 3 следует вынимать полностью. Что-то вроде 4 я бы наверное условно скомпилировал из кода. В течение 5 лет у Аларика была замечательная возможность динамически отключать журналы. Это может касаться точки ChrisF в его второй пули для большинства случаев.
источник
1)
… на1.
… (чтобы форматирование Markdown выбрало его в виде списков) и сделав отступ в примере кода на 8 пробелов (опять же, чтобы Markdown выбрал его в качестве примера). код в списке).Это зависит от того, что делает код. Некоторый код, который используется для отладки, можно оставить как есть, а часть следует удалить.
Код, который проверяет правильность параметров в методе, не всегда полезен, когда код работает правильно, но его часто держат, чтобы убедиться, что код продолжает работать должным образом.
Иногда вы пишете код по-разному, чтобы упростить отладку кода, например, вычисление значения и помещение его в локальную переменную, а затем использование переменной в следующей строке, что позволяет легко проверить результат вычисления при пошаговом выполнении через код. Вы можете переписать код для непосредственного использования вычисленного значения, но стоимость использования локальной переменной настолько мала (если вообще существует), что нет причин для перезаписи кода. Кроме того, есть смысл оставить код неизменным после того, как вы его протестировали, всегда есть небольшой риск, что вы внесете ошибку при его изменении.
Код, который вы добавляете просто для отслеживания конкретной ошибки, часто может быть удален после того, как вы нашли ошибку.
источник
Когда-то я использовал много кода для отладки. Я почти целиком ориентировался на Windows, поэтому было много этой функции вывода строки отладки, которую я не помню, как писать по буквам, поэтому я мог записать трассировку с помощью конкретной программы.
Некоторый отладочный код остался на месте, а именно то, что предназначалось для вложения вызовов. Однако, хотя вещь отладочной строки в производственной системе в основном не видна, все это было сделано при условной компиляции.
Однако реальность такова, что весь этот отладочный код был огромным усилием для чего-то, что в идеале обрабатывается другим способом - с использованием, конечно, отладчика. В то время я не был впечатлен отладчиком Borland C ++. Инструменты были там, но они слишком часто давали вводящие в заблуждение результаты, и использование отладчика без IDE (часто необходимого) означало запоминание сочетаний клавиш, что отвлекало от работы.
Единственный худший отладочный опыт - это GDB из командной строки.
Конечно, важно быть экспертом в работе с инструментами, которые вы используете каждый день, но отладка не должна быть тем, чем вы занимаетесь каждый день. Если вы используете отладчик так часто, у вас все в порядке с изучением десятков команд и / или сочетаний клавиш, что кажется мне немного красным флажком.
К тому времени, когда я работал в Visual Studio 7, стало ясно, что отладка может быть очень практичной и эффективной. Если вы можете выполнить отладку в Visual Studio (включая экспресс-выпуски), отладка очень проста. Без сомнения, если вы сможете найти подходящий интерфейс GUI / IDE, GDB также прост и эффективен, хотя я еще не выполнил этот поиск.
Также есть что сказать для модульного тестирования, с анализом покрытия с использованием gcov. Чем больше вы уверены в поведении ваших библиотек, тем менее глубокой должна быть ваша отладка - и тем реже вам понадобится отладчик. И написание юнит-тестов - это вполне разумная вещь, которой вы должны заниматься большую часть дня.
Неожиданно важный инструмент = cmake, инструмент сборки, который позволяет мне, между прочим, легко переключаться между сборкой для GCC и для VC ++. Таким образом, я могу проводить модульное тестирование и покрытие на основе gcov с помощью GCC, но легко переключаюсь на VC ++, чтобы использовать отладчик.
источник
Мое мнение: код отладки, используемый для устранения ошибки в рассматриваемом коде, я обычно полностью удаляю. Код отладки, используемый для устранения ошибки, вызванной внешними силами, я обычно просто комментирую.
источник
Если ошибка связана с модульным тестированием или с внутренним кодом, код отладки может быть полностью удален. Но если ошибка из-за производства, код отладки лучше быть внутри тегов компиляции. Помещение его в теги компиляции поможет другим разработчикам понять, что этот код предназначен только для целей отладки.
источник
Используйте TDD , чтобы в вашем тестовом коде всегда было место, где он даже поддерживается.
источник