Лучшая практика Обработка ошибок - PullRequest
5 голосов
/ 03 февраля 2011

Мне было интересно, как лучше всего обрабатывать ошибки в приложении на языках программирования, таких как C ++, Java, C #.

Я думал о создании места для хранения номера, связанного с сообщениями об ошибках и предупреждениями..

Например:

10000 -> «Не удается прочитать файл».... 20000 -> "Переполнение буфера".... 80000 -> "Критические вещи".

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

Другой вопрос, как их хранить, как их создавать?

Является ли большой общий список хорошим решением?Должны ли мы хранить их в базе данных?В файле?

должно быть:

  • Легко найти ошибку в коде (т. Е. По номеру).
  • Легко добавить новыйошибка (не использовать один и тот же номер ошибки дважды может быть сложно, если их нет в одном и том же месте).

Что вы, ребята, думаете обо всем этом?

Заранее спасибо заВаша помощь и советы!

Ответы [ 2 ]

6 голосов
/ 03 февраля 2011

Использование кодов ошибок для выявления исключений - неплохая практика.

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

С другой стороны, при разработке может быть раздражающим получение кода ошибки вместо полного сообщения об ошибке со значимым описанием. Разработчик должен пойти и проверить код ошибки.

В одном из моих проектов (с использованием Java) я разработал гибридный подход. У моего корневого исключения есть конструктор, который использует класс Enum. Класс Enum содержит список кодов ошибок + сообщения об ошибках по умолчанию. Что-то вроде:

public enum ErrorCodes {

    VALIDATION_ERROR(5001, "One of the objects cannot be validated"),
    RESOURCE_NOT_FOUND(4004, "The requested resource does not exist"),

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

public CoreException(ErrorCodes _errorCode, final String message, final Throwable cause) {
   super(message, cause);
   errorCode = _errorCode.getCode();
}


public CoreException(ErrorCodes _errorCode, final String message) {
   super(message);
   errorCode = _errorCode.getCode();
}

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

0 голосов
/ 16 марта 2011

Не делай этого.

У нас есть лучшие инструменты, чем C и FORTRAN.

Брось исключения и дай имена. C # и Java будут выдавать стеки вызовов.

C ++ может сказать вам тип исключения (просто)

...