- Debug — что это? Описание инструмента
- Введение
- Debug — что это? Описание процесса
- Debug в контексте MS-DOS
- История
- Важный этап обнаружения ошибок
- Процесс отладки
- Общие инструменты отладки
- Поиск и удаление ошибок программного обеспечения
- Debug Dump Files — можно ли удалить?
- Правильное логгирование в Microsoft .NET Framework
- Зачем нужны логи
- Примитивный подход
- Фичи добропорядочного логгера
- Что и как писать в логи
- Уровни логгирования
- Логи и исключения
- О логах в Python
- Как пользоваться
- Уровни логирования
- DEBUG
- WARNING
- ERROR
- CRITICAL
- Что читать дальше?
- Попробуйте бесплатные уроки по Python
Debug — что это? Описание инструмента
Debug — что это? Debug, или отладка. в компьютерном программировании и разработке, — это многоэтапный процесс, который включает определение проблемы, выявление ее источника, а затем исправление сбоя или выбор способа дальнейшей работы. Последним шагом отладки является проверка корректного исправления.
Введение
Разработка программных продуктов проходит тщательное тестирование, обновление, устранение неполадок и обслуживание. В процессе отладки готовые программные решения регулярно компилируются и выполняются для выявления и устранения проблем. Крупные программы, содержащие миллионы строк исходного кода, делятся на небольшие компоненты. Для эффективности каждый компонент сначала отлаживается отдельно, а затем — в совокупности в рамках программного продукта.
Debug — что это и как работает? Тактика может включать интерактивную отладку, анализ потока управления, модульное и интеграционное тестирование, анализ файлов журналов, мониторинг на уровне приложений или системы, дампы памяти и профилирование.
Debug — что это? Описание процесса
Debug — это штатный процесс поиска и удаления сбоев, ошибок или аномалий компьютерной программы, которые программисты обрабатывают с помощью инструментов отладки. Отладка проверяет, обнаруживает и исправляет ошибки, чтобы обеспечить правильную работу приложения в соответствии с установленными спецификациями.
В разработке программного обеспечения отладка включает в себя поиск и исправление ошибок кода в компьютерной программе. Debug является важным этапом процесса тестирования программного обеспечения и неотъемлемой частью всего жизненного цикла разработки ПО. Процесс отладки начинается, как только код записывается, и продолжается на последующих этапах, поскольку код объединяется с другими модулями программирования для формирования программного продукта. В большой программе, имеющей тысячи строк кода, процесс отладки можно упростить, используя такие стратегии, как модульные тесты, обзоры кода и парное программирование.
Debug в контексте MS-DOS
В MS-DOS Debug — что это? Это команда, которая позволяет программистам исследовать и изменять источники содержимого памяти, которые происходят в операционной системе. Методика предоставления инструкций по компьютерным задачам через интерфейс командной строки изначально использовалась в средах MS-DOS для перевода кода ассемблера в рабочий код и машинного языка в исполняемые (debug.exe) файлы.
Debug позволяет разработчикам просматривать содержимое памяти, вносить изменения, а затем выполнять COM, .exe и другие типы файлов.
История
Microsoft впервые представила команду debug в MS-DOS 1.0 в качестве метода тестирования программ. Была добавлена дополнительная функциональность — инструмент ориентировался на различные операционные задачи, такие как отображение содержимого части памяти, ввод данных по указанному адресу, запуск исполняемых файлов памяти, шестнадцатеричная арифметика и манипуляция регистрационной памятью.
Важный этап обнаружения ошибок
После выявления программного сбоя необходимо найти ошибку в коде (Debug error). На этом этапе полезно просмотреть ведение журнала кода и использовать автономный инструмент отладчика или компонент отладки интегрированной среды разработки (IDE). Изначально обнаруживаются и фиксируются ошибки в наиболее популярных функциях. В некоторых случаях модуль, представляющий проблему, очевиден, а сама строка кода — нет. В этом случае модульные тесты, такие как JUnit и xUnit, которые позволяют программисту запускать определенную функцию с конкретными входами, могут быть полезны при отладке.
Процесс отладки
Стандартная практика состоит в том, чтобы настроить и запустить программу до точки остановки, при которой прекращается выполнение программы. Компонент отладки IDE обычно предоставляет программисту возможность просматривать память и переменные, запускать программу до следующей финальной точки, выполнять только следующую строку кода и в некоторых случаях изменять значение переменных или содержимое строки кода, которая должна быть выполнена.
Общие инструменты отладки
Анализаторы исходного кода, которые включают в себя безопасность, общие ошибки кода и анализаторы сложности, также могут быть полезны при отладке. Анализатор сложности способен найти модули, которые настолько сложны, что их трудно понять и проверить. Некоторые инструменты могут фактически анализировать пробный прогон, чтобы увидеть, какие строки кода не выполнялись. Это может существенно помочь в отладке. Другие инструменты для отладки включают расширенное протоколирование и симуляторы, которые позволяют профессиональному программисту моделировать поведение программы на оборудовании пользователя.
Поиск и удаление ошибок программного обеспечения
Некоторые инструменты, особенно инструменты с открытым исходным кодом и языки сценариев, не запускаются в среде IDE и требуют ручного подхода к отладке. Такие методы включают в себя сброс значений в журнал, расширенные «печатные» заявления, добавленные во время выполнения кода или жестко закодированные debug-команды (например, wait), которые имитируют точку остановки, ожидая ввода клавиатуры в определенное время.
Debug Dump Files — можно ли удалить?
Многие пользователи после возникновения сбоя обнаруживают в месте хранения программы системные файлы. Документы носят наименование Debug Dump Files. Можно ли удалить их? Это отладочные файлы, которые создаются после нарушения работы ПО, чтобы помочь определить причину возникновения ошибки. Если вы не пытаетесь устранить проблему, то можете удалить их.
Источник
Правильное логгирование в Microsoft .NET Framework
Зачем нужны логи
Примитивный подход
public static void Log( string message) <
File .AppendAllText( «log.txt» , message);
>
Зачем что-то ещё придумывать, подключать внешние библиотеки, настраивать конфиги?
На практике, оказывается, что всё не так: одного лог-файла становится уже недостаточно, возникают проблемы с многопоточностью, форматом логов, записью времени, производительностью итд.
Какие же фичи должен поддерживать хороший логгер?
Фичи добропорядочного логгера
Уровни логгирования и фильтрация сообщений
Типичные уровни: Debug, Info, Warn, Error, Fatal
Уровни помогают определить критичность сообщения и приемлемое время реакции на него, об этом подробнее ниже.
Ротация лог-файлов
Логи со временем разрастаются, старые становятся ненужными. Хороший логгер должен уметь подменять активный файл при наступлении определённых условий. Есть два режима: по дате и по размеру файла.
Возможность записи сообщений не только в файлы
Не всегда файл – лучший способ хранения сообщений, хороший логгер должен поддерживать отправку сообщений по протоколу UDP, запись в базу, взаимодействие с очередями сообщений, такими, как MSMQ или JMS. Кроме того, отлично, когда логгер предоставляет возможность реализации собственного потребителя сообщений (обычно это называется термином message consumer, или message appender).
Thread-safety
Потокобезопасность – очень важное требование к логгеру. Плохой логгер может:
- пропустить часть сообщений;
- выбросить исключение
- отрицательно повлиять на производительность
Грамотная реализация потокобезопасности в логгере – один из ключевых моментов.
Асинхронное логгирование
Типичная практика логгирования – асинхронная запись. При этом важно, чтобы размер буфера был гибко настраиваемый, например, debug-сообщения можно писать по 100 штук, а error – немедленно после возникновения.
Формат и конфигурация логов
Формат должен быть настраиваемый, с возможностью указать то, что писать и куда писать. Например, можно писать в файл, хранящийся по пути из переменной окружения. Кроме того, полезная фича – динамическая конфигурация логгера, слежение за файлом конфигурации. Надо включить debug-режим – поменяли конфиг и наслаждаемся вкусными логами без перезапуска приложения.
Что и как писать в логи
Фичи логгеров мы рассмотрели. Но чтобы получить хороший, читаемый лог, надо вести логи правильно.
Начнём с того, что обычно «закон» какого-либо сервиса, отдела – это SLA, соглашение об уровнях сервиса (service level agreement). В нём указываются допустимые уровни восстановления после сбоя, время приемлемой реакции на сообщения итд. Чтобы помочь соблюсти SLA и вовремя отреагировать на событие, существуют уровни логгирования.
Уровни логгирования
Что означает каждый уровень?
Debug: сообщения отладки, профилирования. В production системе обычно сообщения этого уровня включаются при первоначальном запуске системы или для поиска узких мест (bottleneck-ов).
Info: обычные сообщения, информирующие о действиях системы. Реагировать на такие сообщения вообще не надо, но они могут помочь, например, при поиске багов, расследовании интересных ситуаций итд.
Warn: записывая такое сообщение, система пытается привлечь внимание обслуживающего персонала. Произошло что-то странное. Возможно, это новый тип ситуации, ещё не известный системе. Следует разобраться в том, что произошло, что это означает, и отнести ситуацию либо к инфо-сообщению, либо к ошибке. Соответственно, придётся доработать код обработки таких ситуаций.
Error: ошибка в работе системы, требующая вмешательства. Что-то не сохранилось, что-то отвалилось. Необходимо принимать меры довольно быстро! Ошибки этого уровня и выше требуют немедленной записи в лог, чтобы ускорить реакцию на них. Нужно понимать, что ошибка пользователя – это не ошибка системы. Если пользователь ввёл в поле -1, где это не предполагалось – не надо писать об этом в лог ошибок.
Fatal: это особый класс ошибок. Такие ошибки приводят к неработоспособности системы в целом, или неработоспособности одной из подсистем. Чаще всего случаются фатальные ошибки из-за неверной конфигурации или отказов оборудования. Требуют срочной, немедленной реакции. Возможно, следует предусмотреть уведомление о таких ошибках по SMS.
Правильное определение уровней ошибок сказывается на качестве системы и простоте её сопровождения.
Жизненный пример выбора уровней
Давайте представим, что разрабатываемая система – сотрудник почты, который принимает посылки. Принесли посылку.
Debug: Получена посылка 1. Проверяю размер…
Debug: Размер посылки 1: 40×100
Debug: Взвешиваю посылку…
Debug: Вес посылки 1: 1кг
Debug: Проверяю соответствие нормам…
Info (не Error!): Посылка 1 размером 40×100, весом 1кг, отклонена: превышен максимальный размер
…
Info: Посылка 2 размером 20×60, весом 0.5 кг передана на обработку оператору 1
…
Warn: Отказано в обработке для посылки 3: дата на посылке относится к будущему: 2050-01-01
…
Error: Не удалось отдать посылку оператору: оператор не отвечает: таймаут ожидания ответа оператора
…
Fatal: Произошёл отказ весов. Посылки не будут приниматься до восстановления работоспособности.
Логи и исключения
Log( «При записи истории комментариев для аккаунта <0>в хранилище произошла ошибка, данные за сегодня не будут доступны: <1>» , account, ex);
Источник
О логах в Python
Многие программисты используют print для лечения багов, но в больших, серьёзных проектах так не получится:
- Во-первых, они обычно запущены на сервере, из-за чего до вывода print будет не добраться. А если программу перезапустить, то все сообщения пропадут и вовсе.
- Во-вторых, чтобы сообщения были полезны, нужно выводить много всего: время, строку в коде, что случилось… Это всё очень засорит код ненужным мусором.
Просто не выводить такие сообщения — тоже плохо. Представьте, вы написали программу, запустили на сервере. Через год вам пишут, что ваша программа сломалась. И что же делать, где ошибка?
Помогут логи — журнал действий программы. По сути, это те же сообщения через print , только за вас заранее реализовано много всего классного:
- Можно сортировать по степени важности, времени и т. д.
- Можно выводить не только в терминал. За вас уже реализован вывод в файл, например.
- Легко понять где, когда и что произошло.
Как пользоваться
Для ведения логов в Python есть библиотека logging :
Здесь мы создаём записи в логах на разных уровнях важности (от debug до critical). При таком использовании будет выглядеть почти как принты:
Вопрос, куда делись первые 2 сообщения? Дело в том, что logging автоматически фильтрует для вас логи по степени важности DEBUG , INFO , WARNING , ERROR и CRITICAL .
По умолчанию logging фиксирует только логи уровня WARNING и выше (т.е. ещё ERROR и CRITICAL), а все логи уровнями ниже — игнорирует (DEBUG и INFO). Это можно изменить в настройках логов:
Теперь вы увидите все логи, на всех уровнях.
Уровни логирования
Рассмотрим каждый вариант отдельно.
DEBUG
DEBUG — это сообщения для отладки, которые вы оставили для себя. Содержимое переменных и всё такое. Самые не важные. Обычные пользователи их не читают, только программисты и системные администраторы.
INFO — это сообщения о происходящих событиях, не требующих реакции пользователя. Например: отправлено письмо, зарегистрирован пользователь.
WARNING
WARNING — предупреждения о том, что вскоре может привести к неожиданному поведению программы или же к ошибкам в работе модулей. Например: Файл настроек не найден, использую стандартные.
ERROR
ERROR — это такие ошибки, из-за которых приложение вынуждено завершить свою работу или теряет часть функциональности. Например, если чат-бот не может ответить одному из пользователей из-за ошибки, он может его проигнорировать и общаться с остальными.
CRITICAL
CRITICAL — самые серьезные ситуации, когда программа повреждена и простой перезапуск дело уже не исправит. Требуется немедленное вмешательство программиста или системного администратора. Пример такой ситуации — это повреждение базы данных в результате экстренного выключения сервера.
Что читать дальше?
Обращайтесь к нашим статьям:
К статьям с других сайтов:
Или к документации logging
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Источник