powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exceptions. Best practices.
25 сообщений из 82, страница 2 из 4
C++ exceptions. Best practices.
    #38866331
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcвыдать одну ошибку кастомеру "Ваша программа неработает" ?
Нет. Выдать юзеру что такое-то действие выполнено с ошибкой.
Например юзер сохраняет файл, а места на диске нет.
Ему выдается "Ошибка сохранения (нет места)"
При этом ни юзеру ни коду который это показывает совершенно не нужна информация о том в каких глубинах нижележащего кода брошено исключение IOException("Нет места") .
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866346
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonOoCcпропущено...


выдать одну ошибку кастомеру "Ваша программа неработает" ?
Уже говорили выше. Я-бы добавил что стоит различать просто факт
возникновения ошибки (например SocketException). После этого, метод
выболняющий к примеру softwareupdate молча уходит в ожидание. Мало-ли
что там с сетью. WiFi отвалился.

И второй вариант - это как сказано выше для анализа ошибок разработчиком.
В этом варианте я не просто хотел-бы получить __LINE__ где "стрельнуло"
но и "посмертный снимок" стека.
"посмертный снимок" - это отладка и к стандарту языка никакого отношения не имеет.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866428
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCcвыдать одну ошибку кастомеру "Ваша программа неработает" ?вот, это то, что я обычно вижу в коде, основанном на обработке кодов ошибок. Ну нудно же каждый раз разбирать их все, поэтому проще долбануть мессаджбокс с подобным бессмысленным текстом, что ничем не отличается от catch(...), кстати.
В связи с этим аргументация в ( вечном ) споре о том, что лучше коды ошибок или исключения, основанная на том, что какой-то из этих методов провоцирует плохой стиль программирования, а другой - нет, это чушь и популизм. Хорошие программы можно написать, используя любой из этих подходов, а уж плохие - тем более ))
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866494
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyOoCcвыдать одну ошибку кастомеру "Ваша программа неработает" ?
Нет. Выдать юзеру что такое-то действие выполнено с ошибкой.
Например юзер сохраняет файл, а места на диске нет.
Ему выдается "Ошибка сохранения (нет места)"
При этом ни юзеру ни коду который это показывает совершенно не нужна информация о том в каких глубинах нижележащего кода брошено исключение IOException("Нет места") .
Логично. В идеальном мире все очень здорово.
В реале, в глубинах нижележащего кода может возникнуть масса других исключений. Не связанных с нехваткой места. В результате обьем кода обработки ошибок будет приближаться к C с одной стороны и нагрузка в рантайме будет выше чем в С с другой стороны. И к тому же может возрасти трудоемкость (стоимость) дизайна.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866531
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychВ связи с этим аргументация в ( вечном ) споре о том, что лучше коды ошибок или исключения, основанная на том, что какой-то из этих методов провоцирует плохой стиль программирования, а другой - нет, это чушь и популизм. Хорошие программы можно написать, используя любой из этих подходов, а уж плохие - тем более ))

+1
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866593
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ второй вариант - это как сказано выше для анализа ошибок разработчиком.
В этом варианте я не просто хотел-бы получить __LINE__ где "стрельнуло"
но и "посмертный снимок" стека.

Стек не всегда помогает - иногда нужен полный дамп процесса
По виндой использую во такие штуки:

https://code.google.com/p/crashrpt/
https://drdump.com/crash-reporting-system

Кто не пробовал - рекомендую.
помогает вычислять много хитрых ошибок которые не повторяются на компе разработчика.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866599
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OoCc"посмертный снимок" - это отладка и к стандарту языка никакого отношения не имеет.
Не согласен с тезисом. ЯП должен "иметь возможность" детализировать ошибку.
Будь это debug mode или еще что-либо. Привожу пример.

В тестовой конфигурации не удаётся воспроизвести ошибку. (Очень типично).
Ни нагрузка ни датасорсы не могут создать условия.

Единственный кейс - снять максимум полезный инфы с продуктива. Что-то упало
на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка.

И не ОС а именно ЯП должен предоставлять ВОЗМОЖНОСТЬ собрать такой код.
Пускай даже бинарник станет немного больше. Мы идём на такие жертвы.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866670
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто-то упало
на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка.

И не ОС а именно ЯП должен предоставлять ВОЗМОЖНОСТЬ собрать такой код.три вопроса:
* С++ не позволяет собрать такой код, ты считаешь?
* или использование исключений не позволяет собрать такой код?
* в какой ЯП это встроено из коробки, чтобы можно было сказать - вот идеал, и надо так?
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866676
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это был ответ товарищу ОоСс по поводу отладки и стандартов языка.
Я говорю - "как должно" быть в моём понимании. Во всех языках.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866709
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВот вам конкретный пример такого человеческого поведения: 17179694 . Дмитрий застрял именно на том, что у него есть несколько однотипных операций, все они способны выкинуть одно и то-же исключение.
Нет, это совсем не такой пример. Во-первых, эти операции не выкидывают исключения, а только "сообщают, что они выполнились успешно, но с какими-то нюансами". Во-вторых, мне там совершенно пофиг какая операция имела нюансы, достаточно вывалить пользователю или в лог сообщение "были такие-то нюансы, но мы работаем дальше". Вот это "работаем дальше" в случае с исключениями довольно хреново (криво) программируется.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866710
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonOoCc"посмертный снимок" - это отладка и к стандарту языка никакого отношения не имеет.
Не согласен с тезисом. ЯП должен "иметь возможность" детализировать ошибку.
Будь это debug mode или еще что-либо. Привожу пример.

В тестовой конфигурации не удаётся воспроизвести ошибку. (Очень типично).
Ни нагрузка ни датасорсы не могут создать условия.

Единственный кейс - снять максимум полезный инфы с продуктива. Что-то упало
на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка.

И не ОС а именно ЯП должен предоставлять ВОЗМОЖНОСТЬ собрать такой код.
Пускай даже бинарник станет немного больше. Мы идём на такие жертвы.

ВОЗМОЖНОСТЬ - это возможность конкретного компилятора и библиотеки поддержки.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866717
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они не криво программируются. А скорее не решают других вопросов. Например
ЧТО ДЕЛАТЬ в блоке catch(...){}. Здесь наверное мнения мемберов этого
топика уже РАЗДЕЛЯТСЯ даже в тривиальном примере. Скорее всего
само содержание catch должно наполнятся смыслом только в контексте
решаемой задачи. Дать рекомендации по catch "в общем" нет никакой возможности.
Что с мемори? Что с файлами? Что с сокетами? Что закрыать. Что освобождать.
Эскалировать наверх? Что эскалировать? Тоже самое? Или обобщённое?
Или форматировать "лопух" с "баттоном" для гуи? Логгировать? С каким уровнем?
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866725
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто был ответ товарищу ОоСс по поводу отладки и стандартов языка.
Я говорю - "как должно" быть в моём понимании. Во всех языках.а, понял, прости
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38866852
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПадение произошло внутри одной из функций. Мало знать какая функция упала, надо еще знать почему она упала.


Кто мешает тебе во время выбрасывания исключения сохранить эту важную информацию (где и почему) внутри самого исключения?


White OwlЭто более-менее хорошо сделано в java, где исключение автоматоматически собирает полный стек вызовов при передаче на верхние уровни.

Кто мешает тебе в С++ сделать то же самое ?
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867046
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА теперь вопрос. Что это за объект такой logger? И зачем он мне нужен?Для отладки того, что не может быть пройдено в отладчике.Я не хочу никаких логгеров. Мне выводить - некуда. Нет у меня файловой системы.
Вот такие вот условия.

Может быть такое быть?Нет, не может - если вам нужна отладка, то вы обязаны обеспечить приём и обработку отладочных сообщений. И на файловой системе свет клином не сошёлся.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867061
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlПадение произошло внутри одной из функций. Мало знать какая функция упала, надо еще знать почему она упала.
Это более-менее хорошо сделано в java, где исключение автоматоматически собирает полный стек вызовов при передаче на верхние уровни. Там уже действительно можно пройти по списку и действительно найти истинный источник ошибки. В С++ это можно сделать и вручную конечно, но это надо делать.Не надо использовать исключения для отладка, а если этого не делать, то есть всего две ситуации:
1. Мой косяк и это будет необработанное исключение. Трасса стека, конечно, упрощает поиск места возникновения исключения, но совершенно не требуется, чтобы знать где и что упало.
2. Реальная жизнь и я должен знать, что делать с каждым возможным исключением. И каждое такое исключение должно быть обработано, даже если обработка заключается в том, чтобы ничего не делать в catch-блоке.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867072
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ тестовой конфигурации не удаётся воспроизвести ошибку. (Очень типично).
Ни нагрузка ни датасорсы не могут создать условия.

Единственный кейс - снять максимум полезный инфы с продуктива.Я повторю то, что уже озвучивал: протоколирование должно проектироваться и разрабатываться наравне с основным кодом.
Если имеющихся ресурсов недостаточно - надо делать протоколирование под конкретную проблему.Что-то упало
на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка.Реальный случай.
Ловим NPE, отдаём разработчику трассу, где есть "... line 3 35 ". Получаем исправление, работаем дальше и получаем новое NPE с трассой "... line 3 55 ". Всё остальное идентично - и место и причина и ошибка.
Мораль: отправь дурака за бутылкой, так он, дурак, одну и принесёт.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867079
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... правильно. Он с вас 10$ взял за первый NPE. И еще десятку за второй.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867088
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу... правильно. Он с вас 10$ взял за первый NPE. И еще десятку за второй.Это был контракт с фиксированной суммой поддержки, в которую входит исправление ошибок.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867093
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понимешь. Там был костыль. И он подпёр этот костыль другим костылём.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867099
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПонимешь. Там был костыль. И он подпёр этот костыль другим костылём.
Не. Он добавил 20 строк комментов с описанием какая в этой строке происходит ошибка :)
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867100
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПонимешь. Там был костыль. И он подпёр этот костыль другим костылём.Понимаешь, я лучше знаю причину ошибки и, что ещё важнее - условия её возникновения. Поэтому могу утверждать, что костыля не было - был один и тот же косяк в двух местах одного файла на расстоянии двадцати строк (один экран).
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867108
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а какая мораль? Заставить его фиксить все NPE в методе? Модуле? Библиотеке?
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867112
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу а какая мораль?Точное знание места возникновения ошибки слабо связано с качественностью её устранения.
...
Рейтинг: 0 / 0
C++ exceptions. Best practices.
    #38867117
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может мы далеко вперёд забегаем? Я тут переживал за идентификацию "места" исключения.
...
Рейтинг: 0 / 0
25 сообщений из 82, страница 2 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exceptions. Best practices.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]