Налаживаем отладку или улучшаем свой скилл дебаггинга
Все пишут код, который в какой-то момент крашится. Важно учиться на ошибках и не допускать их. Разбираемся, как улучшить скилл дебаггинга.
Проблема с логами
Самый неприятный сценарий при падении программы – отсутствие ошибок в логе. И что с этим делать? Особенно если код чужой, и сам черт в нем ногу сломит. Смотрите внимательно: объясняем только раз ;)
Первый шаг – определить, сбой происходит во время старта или в рантайме. Это можно сделать, распечатав в консоли что-либо произвольное из разных участков кода.
Если вы не видите сообщения журнала, программа, скорее всего, аварийно завершается при старте из-за проблем со сборкой или зависимостями.
Если вы видите свое сообщение, то снова размещайте произвольный вывод в консоль ближе к предположительным местам сбоя. Затем все, что вам нужно сделать – увидеть, какие сообщения напечатались.
Учимся читать сообщения об ошибках
Эксепшены, связанные с фронтэндом, обычно отображаются в UI или консоли разработчика. Иногда эти сообщения видны на сервере – в терминале или в логах. Независимо от того, где происходят эти ошибки, новички слишком растеряны из-за сбоя, чтобы смотреть в логи.
Это основная причина того, почему отладка занимает много времени у большинства разработчиков. Уделяйте особое внимание ошибкам и логам, читайте их внимательно погружаясь в каждую строку сообщения.
Учимся читать системные логи
Некоторые программы создают файлы журнала или ведут записи в журнал системных событий. В этих журналах часто содержится полезная информация. Даже если запись не указывает на конкретное место сбоя, там может быть предупреждение или сообщение об ошибке, предоставляющее подсказку о том, что произошло до возникновения ошибки.
Трассировка и скилл дебаггинга
Трассировка – это отслеживание потока данных программы. Написание "трассирующих блоков" во всех функционально важных кусках кода помогает упростить процесс дебага. Данный тип логгирования облегчает отслеживание выполнения программы во время работы приложения.
Вносите инкрементальные изменения
Многие программисты создают много кода перед сборкой и тестированием. В таком количестве кода время поиска ошибок увеличивается пропорционально его количеству. Вы должны стремиться вносить инкрементные (малые, ступенчатые) изменения и тестировать их как можно чаще. Это гарантирует, что вы не окажетесь в ситуации, когда ваша программа не работает, а вы даже не знаете, почему.
Применяйте автоматизированное тестирование
Модульные тесты сильно помогают обнаружить большое количество ошибок. Чаще всего работающий код ломается после рефакторинга при низком тестовом покрытии, что свидетельствует об отсутствии автоматического тестирования.
Использование метода исключения
Если не удается определить основную причину проблемы, необходимо использовать метод исключения. Закомментируйте новые блоки кода, чтобы увидеть, прекратятся ли ошибки. Такой подход к диагностике кода поможет приблизиться к источнику проблемы.
Избегайте копипаста
Часто разработчики бездумно используют код из интернета, не понимая, что он делает. Это плохая привычка. Важно обращать внимание на то, что происходит в вашем приложении.
Когда задаете вопрос на StackOverflow или других ресурсах, пытайтесь качественно сформулировать его, и в конечном счете ответ сам придет.
Если у вас есть команда, используйте метод "второй пары ушей" – разговаривайте с коллегами и ответ не заставит себя долго ждать. Это подстегивает задуматься над решением.
Многократное повторение
Считается, что один из самых успешных методов отладки – это снова и снова пытаться повторно реализовать определенный функционал с нуля. Это заставляет вас находить потенциальные проблемы, воссоздавая реализацию.
Учимся отслеживать события
Если вы изолируете симптомы сбоя в определенной области, можно начать подниматься по стеку вызовов для проверки всех переменных и ожидаемых значений. Это может быстро привести к обнаружению частей программы, в которых происходит непредвиденное поведение.
Научитесь пользоваться отладчиком
Лучший вклад в скилл дебаггинга, который вы можете внести, – это научиться пользоваться отладчиком. Все IDE поставляются с мощными отладчиками. Они позволяют остановить выполнение приложения при запуске или в любой другой части кода. Есть также масса сторонних инструментов для отладки, если по каким-то причинам встроенный вам не нравится.