Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
OoCcвыдать одну ошибку кастомеру "Ваша программа неработает" ? Нет. Выдать юзеру что такое-то действие выполнено с ошибкой. Например юзер сохраняет файл, а места на диске нет. Ему выдается "Ошибка сохранения (нет места)" При этом ни юзеру ни коду который это показывает совершенно не нужна информация о том в каких глубинах нижележащего кода брошено исключение IOException("Нет места") . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 10:37 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonOoCcпропущено... выдать одну ошибку кастомеру "Ваша программа неработает" ? Уже говорили выше. Я-бы добавил что стоит различать просто факт возникновения ошибки (например SocketException). После этого, метод выболняющий к примеру softwareupdate молча уходит в ожидание. Мало-ли что там с сетью. WiFi отвалился. И второй вариант - это как сказано выше для анализа ошибок разработчиком. В этом варианте я не просто хотел-бы получить __LINE__ где "стрельнуло" но и "посмертный снимок" стека. "посмертный снимок" - это отладка и к стандарту языка никакого отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 10:48 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
OoCcвыдать одну ошибку кастомеру "Ваша программа неработает" ?вот, это то, что я обычно вижу в коде, основанном на обработке кодов ошибок. Ну нудно же каждый раз разбирать их все, поэтому проще долбануть мессаджбокс с подобным бессмысленным текстом, что ничем не отличается от catch(...), кстати. В связи с этим аргументация в ( вечном ) споре о том, что лучше коды ошибок или исключения, основанная на том, что какой-то из этих методов провоцирует плохой стиль программирования, а другой - нет, это чушь и популизм. Хорошие программы можно написать, используя любой из этих подходов, а уж плохие - тем более )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 11:43 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyOoCcвыдать одну ошибку кастомеру "Ваша программа неработает" ? Нет. Выдать юзеру что такое-то действие выполнено с ошибкой. Например юзер сохраняет файл, а места на диске нет. Ему выдается "Ошибка сохранения (нет места)" При этом ни юзеру ни коду который это показывает совершенно не нужна информация о том в каких глубинах нижележащего кода брошено исключение IOException("Нет места") . Логично. В идеальном мире все очень здорово. В реале, в глубинах нижележащего кода может возникнуть масса других исключений. Не связанных с нехваткой места. В результате обьем кода обработки ошибок будет приближаться к C с одной стороны и нагрузка в рантайме будет выше чем в С с другой стороны. И к тому же может возрасти трудоемкость (стоимость) дизайна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 12:26 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
egorychВ связи с этим аргументация в ( вечном ) споре о том, что лучше коды ошибок или исключения, основанная на том, что какой-то из этих методов провоцирует плохой стиль программирования, а другой - нет, это чушь и популизм. Хорошие программы можно написать, используя любой из этих подходов, а уж плохие - тем более )) +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 12:40 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonИ второй вариант - это как сказано выше для анализа ошибок разработчиком. В этом варианте я не просто хотел-бы получить __LINE__ где "стрельнуло" но и "посмертный снимок" стека. Стек не всегда помогает - иногда нужен полный дамп процесса По виндой использую во такие штуки: https://code.google.com/p/crashrpt/ https://drdump.com/crash-reporting-system Кто не пробовал - рекомендую. помогает вычислять много хитрых ошибок которые не повторяются на компе разработчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:07 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
OoCc"посмертный снимок" - это отладка и к стандарту языка никакого отношения не имеет. Не согласен с тезисом. ЯП должен "иметь возможность" детализировать ошибку. Будь это debug mode или еще что-либо. Привожу пример. В тестовой конфигурации не удаётся воспроизвести ошибку. (Очень типично). Ни нагрузка ни датасорсы не могут создать условия. Единственный кейс - снять максимум полезный инфы с продуктива. Что-то упало на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка. И не ОС а именно ЯП должен предоставлять ВОЗМОЖНОСТЬ собрать такой код. Пускай даже бинарник станет немного больше. Мы идём на такие жертвы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:09 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonЧто-то упало на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка. И не ОС а именно ЯП должен предоставлять ВОЗМОЖНОСТЬ собрать такой код.три вопроса: * С++ не позволяет собрать такой код, ты считаешь? * или использование исключений не позволяет собрать такой код? * в какой ЯП это встроено из коробки, чтобы можно было сказать - вот идеал, и надо так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:58 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Это был ответ товарищу ОоСс по поводу отладки и стандартов языка. Я говорю - "как должно" быть в моём понимании. Во всех языках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:01 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
White OwlВот вам конкретный пример такого человеческого поведения: 17179694 . Дмитрий застрял именно на том, что у него есть несколько однотипных операций, все они способны выкинуть одно и то-же исключение. Нет, это совсем не такой пример. Во-первых, эти операции не выкидывают исключения, а только "сообщают, что они выполнились успешно, но с какими-то нюансами". Во-вторых, мне там совершенно пофиг какая операция имела нюансы, достаточно вывалить пользователю или в лог сообщение "были такие-то нюансы, но мы работаем дальше". Вот это "работаем дальше" в случае с исключениями довольно хреново (криво) программируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:15 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonOoCc"посмертный снимок" - это отладка и к стандарту языка никакого отношения не имеет. Не согласен с тезисом. ЯП должен "иметь возможность" детализировать ошибку. Будь это debug mode или еще что-либо. Привожу пример. В тестовой конфигурации не удаётся воспроизвести ошибку. (Очень типично). Ни нагрузка ни датасорсы не могут создать условия. Единственный кейс - снять максимум полезный инфы с продуктива. Что-то упало на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка. И не ОС а именно ЯП должен предоставлять ВОЗМОЖНОСТЬ собрать такой код. Пускай даже бинарник станет немного больше. Мы идём на такие жертвы. ВОЗМОЖНОСТЬ - это возможность конкретного компилятора и библиотеки поддержки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:17 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Они не криво программируются. А скорее не решают других вопросов. Например ЧТО ДЕЛАТЬ в блоке catch(...){}. Здесь наверное мнения мемберов этого топика уже РАЗДЕЛЯТСЯ даже в тривиальном примере. Скорее всего само содержание catch должно наполнятся смыслом только в контексте решаемой задачи. Дать рекомендации по catch "в общем" нет никакой возможности. Что с мемори? Что с файлами? Что с сокетами? Что закрыать. Что освобождать. Эскалировать наверх? Что эскалировать? Тоже самое? Или обобщённое? Или форматировать "лопух" с "баттоном" для гуи? Логгировать? С каким уровнем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:22 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonЭто был ответ товарищу ОоСс по поводу отладки и стандартов языка. Я говорю - "как должно" быть в моём понимании. Во всех языках.а, понял, прости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:27 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
White OwlПадение произошло внутри одной из функций. Мало знать какая функция упала, надо еще знать почему она упала. Кто мешает тебе во время выбрасывания исключения сохранить эту важную информацию (где и почему) внутри самого исключения? White OwlЭто более-менее хорошо сделано в java, где исключение автоматоматически собирает полный стек вызовов при передаче на верхние уровни. Кто мешает тебе в С++ сделать то же самое ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 15:53 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonА теперь вопрос. Что это за объект такой logger? И зачем он мне нужен?Для отладки того, что не может быть пройдено в отладчике.Я не хочу никаких логгеров. Мне выводить - некуда. Нет у меня файловой системы. Вот такие вот условия. Может быть такое быть?Нет, не может - если вам нужна отладка, то вы обязаны обеспечить приём и обработку отладочных сообщений. И на файловой системе свет клином не сошёлся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 17:59 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
White OwlПадение произошло внутри одной из функций. Мало знать какая функция упала, надо еще знать почему она упала. Это более-менее хорошо сделано в java, где исключение автоматоматически собирает полный стек вызовов при передаче на верхние уровни. Там уже действительно можно пройти по списку и действительно найти истинный источник ошибки. В С++ это можно сделать и вручную конечно, но это надо делать.Не надо использовать исключения для отладка, а если этого не делать, то есть всего две ситуации: 1. Мой косяк и это будет необработанное исключение. Трасса стека, конечно, упрощает поиск места возникновения исключения, но совершенно не требуется, чтобы знать где и что упало. 2. Реальная жизнь и я должен знать, что делать с каждым возможным исключением. И каждое такое исключение должно быть обработано, даже если обработка заключается в том, чтобы ничего не делать в catch-блоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:07 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonВ тестовой конфигурации не удаётся воспроизвести ошибку. (Очень типично). Ни нагрузка ни датасорсы не могут создать условия. Единственный кейс - снять максимум полезный инфы с продуктива.Я повторю то, что уже озвучивал: протоколирование должно проектироваться и разрабатываться наравне с основным кодом. Если имеющихся ресурсов недостаточно - надо делать протоколирование под конкретную проблему.Что-то упало на проде. Главный вопрос. Что? Где? Какая библиотека. Какой метод. Какая строка.Реальный случай. Ловим NPE, отдаём разработчику трассу, где есть "... line 3 35 ". Получаем исправление, работаем дальше и получаем новое NPE с трассой "... line 3 55 ". Всё остальное идентично - и место и причина и ошибка. Мораль: отправь дурака за бутылкой, так он, дурак, одну и принесёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:16 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Ну... правильно. Он с вас 10$ взял за первый NPE. И еще десятку за второй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:22 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonНу... правильно. Он с вас 10$ взял за первый NPE. И еще десятку за второй.Это был контракт с фиксированной суммой поддержки, в которую входит исправление ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:26 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Понимешь. Там был костыль. И он подпёр этот костыль другим костылём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:27 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonПонимешь. Там был костыль. И он подпёр этот костыль другим костылём. Не. Он добавил 20 строк комментов с описанием какая в этой строке происходит ошибка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:30 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonПонимешь. Там был костыль. И он подпёр этот костыль другим костылём.Понимаешь, я лучше знаю причину ошибки и, что ещё важнее - условия её возникновения. Поэтому могу утверждать, что костыля не было - был один и тот же косяк в двух местах одного файла на расстоянии двадцати строк (один экран). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:31 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
Ну а какая мораль? Заставить его фиксить все NPE в методе? Модуле? Библиотеке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:35 |
|
||
|
C++ exceptions. Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonНу а какая мораль?Точное знание места возникновения ошибки слабо связано с качественностью её устранения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 18:39 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38867100&tid=2019127]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 168ms |

| 0 / 0 |
