anonymous@RULINUX.NET~# Last login: 2025-04-15 08:03:53
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск


Exception

Как вы обрабатываете исключения?

Я не люблю передавать исключения дальше по вызову. Сначала я делал так (для примера):

java

/**
 * Возвращает имя объекта.
 * В случае ошибки возвращает null.
 */

public static String getName(ObjectWithName arg) {
    try {
        if (arg.name != null && !arg.name.isEmpty()) {
            return arg.name; //OK_EXIT
        } else {
            return generateNewName(arg); // OK_EXIT
        }
    } catch (Exception e) {
        System.out.println("[ERROR] Не удалось получить имя");
        e.printStackTrace();
        return null; //ERROR_EXIT
    }
}
 


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

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

  •   Тематическое пояснение к исключению
  •   Распечатка стека вызовов
  •   Скриншот всего основного монитора на момент исключения
  •   Фрагмент декомпилированного кода, в котором возникло исключение (класс задается явно, так как может интересовать не фронтовой относительно исключения класс, а второй или третий эшелон). Фрагмент включает плюс-минус 30 строчек вокруг строки с ошибкой, с указанием номеров строк и меткой у строки с ошибкой.
  •   Список полей и их значений у некоторых объектов


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

java

/**
 * Возвращает имя объекта.
 * В случае ошибки создает отчет.
 */

public static String getName(ObjectWithName arg) {
    try {
        if (arg.name != null && !arg.name.isEmpty()) {
            return arg.name; //OK_EXIT
        } else {
            return generateNewName(arg); // OK_EXIT
        }
    } catch (Exception e) {
        Errors.DisplayReport(
            "Исключение при получении имени для ObjectWithName", // тематический комментарий
            e, // Откуда извлечь стек вызовов
            ObjectWithName.getClass().getName(), // фрагмент кода какого класса показать
            arg  // объект для анализа значений полей
        );
        throw new RunTimeException("Так жить больше нельзя");
    }
}
 

AMUR-WOLF(*)(2018-03-17 04:34:05)

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
Тема:

Ваш комментарий:

Выберите фильтр: матерные выражения
торсионщина
нацпол
спам
флуд
порно
изображения
модераторские/пользовательские фильтры
captcha
Введите символы либо ответ (если на картинке задача):

Пользователям браузеров без CSS: Поле для проверки, заполнять НЕ НАДО:




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!