AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
и везде тулят try-catch(Exception ex)?
Скорее всего, как затычка
Ну так есть глобальный хендлер, хера вы херачите говнокод?!
да, потому-что есть один глобальный хендлер где можно закодить логирование и не обмазываться этими трайкетчами где ненадо
Ну иногда обрабатывать некоторые ошибки нужно
НЕКОТОРЫЕ, а не тупо все возможные
Ти не завжди хочеш (точніше, майже ніколи не хочеш), щоб помилки переривали виконання всього коду і викидали виконання аж в глобальний хендлер Глобальний хендлер тільки для того, щоб ловити критичні необроблені помилки, які просочилися Інакше ти кладеш всю інфру заради "лога" Зазвичай у кожного фреймворка є власні глобальні хендлери (у asp.net core це middleware, у azure functions це ще якісь свої штуки, і т.д.) Плюс, ловлячи помилку десь далеко, ти втрачаєш локальний контекст (ти не можеш, наприклад, залогати стан локальних змінних на момент виникнення помилки, бо ти вже десь далеко на рівні домену)
Ты не хочешь прерывать исполнение если это ошибки логики а не твои неотловленные наллрефы Но у ошибок логики есть определенныйц тип который и надо хендлить, а не супекласс Exception
ти будеш вишукувати кожен клас помилки (яких в 1 методі може бути умовно 10), який може кинути кожна з ліб, яку ти юзаєш, щоб окремо це обробити, і так в усіх місцях коду, щоб твої try/catch локальні займали по 100 строк? успіхів) null ref там ніколи в цілому не має навіть виникнути Якщо він там виникнув у проді - питання до QA Коли код пишеться правильно - в цьому навіть нічого поганого немає, бо помилка (яка б вона не була) логується, а юзеру коректно повертається текст помилки на UI І знову ж таки останній абзац минулого повідомлення, досі валідний навіть для null ref
Да, все обшики которые приходят извне сборки надо отдельно оьрабатыватьсогласно контракту вызваемых методов
Давай інакше, мінуси якщо вони окремо не оброблюються (не беручи до уваги окремі випадки, коли це необхідно по логіці)?
Захламляется код лишними вложенностями и вызовам логов
Не згоден. У нас на проєкті в 95% випадків хендляться помилки catch (Exception), все ок
тому що якщо помилка дойде до глогбалнього хендлера, то потік вмре)
не обязательно, если ты в хендлере проставишь private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { e.Handled = true; } то не умрет
Я не про процес, а про потік кажу. Там не залишиться чому виконуватись, якщо стек ввесь розмотався
Обсуждают сегодня