Я считаю, что лучшее время для "отладки" - это когда вы пишете код. Другими словами, будь оборонительным. Проверяйте возвращаемые значения, свободно используйте assert, используйте какой-нибудь надежный механизм регистрации и регистрируйте все.
Чтобы более прямо ответить на вопрос, наиболее эффективный способ отладки проблем - это чтение кода. Наличие журнала поможет вам найти соответствующий код для быстрого чтения. Нет регистрации? Потратьте время на его исправление. Может показаться, что вы не нашли ошибку, а может и нет. Регистрация может помочь вам найти еще одну ошибку, и, в конце концов, как только вы пройдете достаточно кода, вы найдете его ... быстрее, чем настройка отладчиков и попытка воспроизвести проблему, пошаговое выполнение и т. Д.
Во время отладки я стараюсь думать о возможных проблемах. Я придумал довольно произвольную систему классификации, но она работает для меня: все ошибки попадают в одну из четырех категорий. Имейте в виду, что я говорю о проблемах во время выполнения, а не об ошибках компилятора или компоновщика. Четыре категории:
- динамическое выделение памяти
- переполнение стека
- неинициализированная переменная
- логическая ошибка
Эти категории были наиболее полезны для меня с C и C ++, но я ожидаю, что они применимы довольно хорошо в других местах. Категория логической ошибки является большой (например, добавление
Знание того, что я ищу (одна из этих четырех вещей), очень помогает в ее поиске. Поиск ошибок всегда кажется гораздо сложнее, чем их исправление.
Фактическая механика отладки чаще всего:
- у меня есть автоматический тест, который демонстрирует проблему?
- , если нет, добавить тест, который не проходит
- изменить код, чтобы тест прошел
- убедитесь, что все остальные тесты еще проходят
- проверить изменения
Нет автоматизированного тестирования в вашей среде? Нет времени, как подарок, чтобы настроить его. Слишком сложно организовать вещи, чтобы вы могли протестировать отдельные части вашей программы? Потратьте время, чтобы сделать это так. Может потребоваться «слишком много времени» для исправления этой конкретной ошибки, но чем раньше вы начнете, тем быстрее все остальное пойдет. Опять же, вы можете не исправить конкретную ошибку, которую вы ищете, но держу пари, что вы найдете и исправите других по пути.