2008-11-23 3 views
17

Я хотел бы знать, есть ли у вас какие-либо предложения относительно уровней отладки при написании приложения.Уровни отладки при написании приложения

Я думал о 4 уровнях:

0: Нет Debug
1: Все входы и выходы
2: "Я здесь" уведомление от существенных функций с основными параметрами
3: Все переменные слишком разговорчивым

+0

Я заметил, что большинство ответов здесь говорят об общих уровнях журналов, которые кажутся почти стандартизированными (отладка, информация, уведомление, предупреждение и т. Д.), Но на самом деле возникает вопрос об уровнях журнала DEBUG для увеличения/уменьшения «многословия» уровень отладочного журнала. Я предполагаю, что это будет другая цифровая подсистема. Однако paxdiablo, включая такие вещи, как LOG_ENTRY, в основную систему, похоже, может быть лучшей идеей. – Programster 2014-04-17 08:55:45

ответ

3

что бы вы ни выбрали, будет то, что вы хотели, чтобы увидеть, как раз на следующий уровень ...

Я не думаю, что есть общий ответ на этот вопрос, becaus Это зависит от того, что делает приложение. Подобно маслянистым страницам в руководстве Haynes (читатели из Великобритании узнают, что я имею в виду), я, как правило, обнаруживаю, что в итоге вы столкнулись с тяжелыми лесозаготовками в районах, которые традиционно были неприятными, и почти никого в районе, который будет вызывать вы беспокоитесь следующий.

1

Это мой список:

  • Silent-Mode:

Application излучает ничего отлаживать связанный. Ни при каких обстоятельствах приложение ничего не выдаст на UART или отладочную консоль.

  • Error-Mode:

Hard и ун-неисправимых ошибок записываются в консоли.

  • Предупреждение-Mode:

Включает дополнительные отладки информации, предназначенной, чтобы помочь другим программистам.

Этот режим не предназначен для обнаружения ошибок, но для предоставления информации другим программистам, которые используют мои приложения/библиотеку. В режиме предупреждения я в основном проверяю входные параметры и пытаюсь определить, пытается ли кто-то сделать что-то глупое. Подобно грубой силе решения или передавая только тот самый тип данных, который является самым медленным.

  • отладки-режим (Уровень 1-4)

В режиме отладки я начала входить все, отсортированных по частоте вхождение. Уровень 1 не очень многословный. Основные вещи, которые моя программа/приложение выполнили, регистрируются. Не намного больше. Этот режим предназначен для получения приблизительного представления о том, что делает клиент.

Чем выше режим отладки, тем больше информации регистрируется.

Мой самый высокий уровень отладки зарезервирован для всех межпроцессорных и межпроцессорных коммуникаций. Все обращения к семафорам, e-mutexes будут регистрироваться с максимальной детализацией.

11

Вот что мы сделали в одном проекте, над которым я работал. Это не библия уровней регистрации, а одна возможность. Ведение журнала должно соответствовать вашей ситуации.

  • LOG_SEVERE, серьезные ошибки, требующие выхода программы (например, в приложении у вас закончилось дисковое пространство).
  • LOG_ERROR, сообщения об ошибках, которые невозможно восстановить, но программа может продолжать работать (например, в серверном приложении, клиент, отправленный через плохие данные, но другие клиенты могут продолжать работать).
  • LOG_WARNING, восстанавливаемая проблема, о которой вы должны получить уведомление (например, недопустимое значение в файле конфигурации, чтобы вы вернулись к умолчанию).
  • LOG_INFO, информационные сообщения.
  • LOG_ENTRY, запись в журнал и выход ко всем функциям.
  • LOG_PARM, запись в журнал и выход ко всем функциям с переданными параметрами и возвращаемыми значениями (включая глобальные эффекты, если таковые имеются).
  • LOG_DEBUG, общие отладочные сообщения, в основном полезная информация, которая может выводиться в одной строке.
  • LOG_HIDEBUG, гораздо более подробные отладочные сообщения, такие как шестнадцатеричные дампы буферов.

Каждый уровень также регистрирует сообщения на нижних уровнях. Иногда возникал вопрос о том, должно ли сообщение отладки быть LOG_DEBUG или LOG_HIDEBUG, но мы в основном основывали его на количестве строк, которые он вытолкнул бы в файл журнала.

+8

На первом проходе я прочитал этот последний как LOG_HideBug ...: D – VertigoRay 2016-08-25 15:55:19

0

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

Я видел примеры разработчиков, регистрирующих ошибку в пакете tcp, когда не удалось доставить пакет, даже если он обрабатывается, а повторная отправка выполняется вызывающим.
Разработчик, о котором идет речь, сказал: «Но в этом контексте это ошибка».

Вам нужно определить такие вещи, как:
ошибки означает, что приложения неисправна и должна быть перезапущена.
Предупреждение может Meen, что одна функция приложения не удалось, но о том, что приложение может восстановить и продолжить
и так далее ...

Точное число уровней не так важно, как последовательное использование этих уровней во всем приложении.

Это может быть очень полезно, если во время выполнения можно изменять уровни и, если возможно, выбирать разные уровни для разных частей приложения.

+0

«Ошибка означает, что приложение потерпело неудачу и его необходимо перезапустить». Я бы сделал это утверждение/исключение в сборках отладки. – 2008-11-23 11:43:22

0

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

Журналы отладки предназначены для использования только в целях отладки. уровни для меня, чтобы выбрать, насколько серьезной будет отладка.

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

Спасибо за хорошие предложения!

Omri.

6

у меня есть:

  • Critical/Fatal, программа может не представляется возможным продолжать, как правило, пользователь потерял.
  • Ошибка, что-то действительно не так, используемые данные могут быть повреждены, но вам может быть повезло.
  • Внимание! Неправильно, я могу продолжить, но, пожалуйста, посмотрите.
  • Подсказка/информация, мне нравится что-то сказать, но я не ожидаю, что вы послушаете.
  • Отладка, вся информация, интересная только программистам.

Нормальный низкий уровень двух уровней заблокирован. Но другие показаны. И если вы хотите заблокировать уровень Fatal, все в порядке со мной, но не ожидайте, что я очищу беспорядок после этого (к сожалению, мне все еще нужно ...).

+1

Я бы использовал этот список, так как он отлично отображает уровни log4net. Не изобретайте свое собственное колесо, когда он работает достаточно хорошо. Один голос от меня! – 2008-11-23 12:37:46

0

0: нет регистрации

1: каротаж исключения: журнал каждой брошенной ошибки. Например, в C#: регистрация в блоках catch. Когда эти операции с журналом запускаются, вы знаете, что у вас есть ошибка. Вы также можете регистрировать операторы switch, если есть случай, который никогда не должен быть удачным и тому подобное.

2: ведение журнала операций: операции регистрации, которые не находятся в блоках catch (нормальные операции), должны быть настроены на высокую степень отладки. Таким образом, вы можете увидеть, какой метод запускается, а затем заканчивается в блоке catch.

Также подумайте о переключателях ведения журнала, например о регистрации пакетов (true: протоколировать сетевые пакеты/сообщения, false: do not). Просто не переусердствуйте с переключателями.

При обработке исключений каждый орган метода должен быть как минимум в блоке try-catch, по крайней мере, с общим выводом исключения в конце. Поместите регистрацию в блок catch, добавьте дополнительную информацию, помимо системного сообщения и трассировку стека, чтобы указать, что вызвало ошибку, а затем выбросите ошибку. Остановить ошибки при отправке только тогда, когда пользователь был уведомлен об ошибке, или вы находитесь на верхнем уровне приложения, у которого нет активного пользовательского интерфейса. (Например, ведение журнала на стороне сервера.) Затем вам нужно указать в сообщении клиентскому приложению, что ошибка произошла на стороне сервера.

7

Обычно я использовал более четырех уровней, хотя у них не обязательно есть имена. Вы можете посмотреть уровни, предоставленные процессом демонов «syslog».

0 - Emergency (emerg) 
1 - Alerts (alert) 
2 - Critical (crit) 
3 - Errors (err) 
4 - Warnings (warn) 
5 - Notification (notice) 
6 - Information (info) 
7 - Debug (debug) 

(Пакет log4j добавляет уровень ниже «отладки» под названием «Трейс», но обеспечивает только «Fatal», где syslog и syslogd обеспечивают Emergency, оповещения и Critical.) Это не имеет прямого отношения, но должны дать вы немного задумались. Список, предоставленный Pax, довольно разумный.

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

Вы можете найти источник, я использую на GitHub в моем SOQ (Stack Overflow Вопросы) хранилище в виде файлов debug.h, debug.c, mddebug.c в src/libsoq подкаталоге.

+0

Если говорить о Log4j, я считаю, что theres 8-Trace ниже Debug – 2015-02-22 14:17:17

Смежные вопросы