Pull to refresh
  • by relevance
  • by date
  • by rating

История одного класса для обработки ошибок.

Lumber room

Предисловие (Смело можно пропускать)



Приятного времени суток.

У меня возникло желанием поделиться с вами одной историей. Историей возникновения класса обработки ошибок. Почему просто не привести класс “as is” и не позволить вам судить о его достоинствах и недостатках? Причина проста. В этом случае не возможно будет понять, почему он стал именно таким, каким является. Невозможно будет обнаружить ошибки в логике его создания. Невозможно понять схожа ли у вас ситуация с моей и возможно ли для вас его использование или, возможно, лучше обратить свое внимание на другой класс обработки ошибок. Благо, таковых вы найдете множество.

А с какого такого перепугу я вообще занялся сочинением собственного класса обработки ошибок? Ведь есть масса наработок в этой области. Наработок серьезных, очень неглупых людей. Причина проста. К созданию этих классов привели разные причины, создание этих классов преследовало разные цели. И, как всем нам хорошо известно, велосипедов мало не бывает и на вкус они все разные.
Читать дальше →
Total votes 18: ↑5 and ↓13 -8
Views 433
Comments 8

Lagger — обработка ошибок и отладка в PHP с закрытыми глазами

PHP *
image

Впервые этот инструмент был представлен широкой публике в 2008 году на конференции Highload.ru, после чего был основательно оптимизирован и доработан. О том, что же это за зверь такой и как им удобно пользоваться
читаем далее
Total votes 72: ↑42 and ↓30 +12
Views 2K
Comments 45

Слежение за процессами и обработка ошибок, часть 1

Erlang/OTP *

0 Преамбула


Согласитесь приятно, когда в хозяйстве все под контролем и все в порядке, каждая вещь стоит на своем месте и четко выполняет свое вселенское предназначение. Сегодня мы рассмотрим вопросы организации порядка в огромном множестве процессов эрланга. Базовые понятия о процессах эрланга можно прочитать в этом посте.
Читать дальше →
Total votes 35: ↑30 and ↓5 +25
Views 3.6K
Comments 4

Слежение за процессами и обработка ошибок, часть 2

Erlang/OTP *

Преамбула


В первой части данной статьи мы рассмотрели механизм связей между процессами и процесс распространения ошибок. Сегодя давайте рассмотрим один случай, который не был освещен в предыдущей части – постреляем по процессам сигналом kill.
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views 3.2K
Comments 11

Слежение за процессами и обработка ошибок, часть 3

Erlang/OTP *

Преамбула


В предыдущих частях (часть 1, часть 2) мы полностью рассмотрели механизм создания двунаправленных связей между процессами и процесс распространения ошибок. В данной статье будет разобран, достаточно простой, механизм мониторов и ещё несколько аспектов касающихся работы с процессами.
Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Views 4.9K
Comments 5

MS SQL 2011 — Обработка ошибок

SQL *
Translation
Новое полезное дополнение для SQL Server 2011 (Denali) ­– выражение Throw. Разработчики на .Net уже догадались наверно, где и как оно будет использоваться.

Это слово может использоваться в сочетании с управляющей конструкцией Try…Catch и позволяет послать уведомление о возникновении ошибки времени исполнения. Когда возникает исключение, программа ищет ближайший по иерархии вверх блок Catch который может обработать исключение. Используя это выражение внутри блока Catch можно изменить вывод ошибки. Более того, теперь вызывать исключение можно произвольно в любом месте скрипта.

Далее рассмотрим различные способы поимки исключении, которые предоставляет SQL Server начиная с версии 2000 и до версии 2011, с указанием плюсов и минусов.

Читать дальше →
Total votes 43: ↑32 and ↓11 +21
Views 52K
Comments 2

Умные эксепшены

Programming *
Sandbox
Недавно ковырял паттерны проектирования и попутно пытался переделать один проект на эксепшены. Из этого коктейля родилось несколько мыслей, которыми хочется поделиться с общественностью.
Читать дальше →
Total votes 27: ↑14 and ↓13 +1
Views 4K
Comments 19

Делаем простейший сборщик ошибок для Android

Development for Android *
При разработке приложения неизбежно приходится сталкиваться с ошибками в коде и/или окружении. И очень печально когда подобные ошибки встречаются не на тестовом телефоне/эмуляторе а у живых пользователей. Еще печальнее если это не ваш друг бета-тестер и толком никто не может объяснить что и где свалилось.

Обычно при внезапном падении приложения Android предлагает отправить отчет об ошибке, где будет и подробный стэк-трейс и информация о версии вашего приложения. К сожалению пользователи не всегда нажимают кнопку «отправить отчет» а для дебаг-приложений или приложений не из маркета такая функциональность и вовсе недоступна.

Что же делать? На помощь приедет возможность языка Java обрабатывать исключения (Exceptions), в том числе и непойманные (unhandled).

Читать дальше →
Total votes 59: ↑52.5 and ↓6.5 +46
Views 24K
Comments 13

Оптимизация ошибок?!

Website development *

Введение


Меня до глубины души задело заявление моего коллеги, что использовать исключения — это неправильно. А далее последовала череда объяснений: это медленно, это некрасиво, это неэффективно, это неудобно.
Читать дальше →
Total votes 76: ↑55 and ↓21 +34
Views 3.3K
Comments 190

Схема обработки ошибок в Yii

Yii *
Sandbox
Всем привет!
Процесс обработки ошибок в Yii был для меня не совсем прозрачным с первых дней использования этого фреймворка. Даже несмотря на наличие в документации специального раздела Error Handling. В каких случаях какие view используются, как влияет ajax или debug-режим, зачем нужен errorAction, в чем отличия при обработке исключений?
В итоге после копания в документации и исходном коде фреймворка я нарисовал наглядную схему обработки ошибок, которая лично для меня оказалась весьма полезной и наверняка пригодится кому-то еще.
Под катом собственно схема и некоторые комментарии к ней.
Читать дальше →
Total votes 49: ↑46 and ↓3 +43
Views 32K
Comments 22

Обработка всех исключений в контроллерах с помощью атрибута

ASP *
Всё мы знаем, что в ASP.NET MVC есть такой атрибут HandleErrorAttribute, который как сказано в MSDN
Представляет атрибут, используемый для обработки исключения, вызываемого методом действия.

Но нигде, в том же MSDN не сказано (ткните меня носом дайте ссылку где это написано, если я просмотрел), что он обрабатывает только исключения, устанавливающие код ответа сервера в 500.

Посмотрев на исходный код HandleErrorAttribute легко убедиться в этом. Там имеются следующие строки:

// If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method),
// ignore it.
if (new HttpException(null, exception).GetHttpCode() != 500) {
    return;
}

Не знаю, как вам, а мне удобнее при возникновении исключения, чтобы пользователи видели специальную страницу для этого, а не «жёлтую страницу смерти» или вообще как браузер отображает стандартную для него страницу с кодом ответа сервера (зависит от настроек в Web.config, но об этом позже).

Читать дальше →
Total votes 19: ↑12 and ↓7 +5
Views 13K
Comments 3

Обработка исключений «Maximum request length exceeded» в ASP.NET

.NET *
На написание данной статьи-заметки меня сподвигла работа над формой обратной связи, в которой имелась возможность отправки файлов на сервер. Естественным образом, захотелось ограничить размер загружаемых файлов со стороны сервера и выдавать пользователю соответствующее сообщение. Хорошая новость заключалась в том, что ASP.NET имеет встроенные средства для такого ограничения. Плохая – нет лёгких путей обработки данной ситуации.

Подробнее об одном из способов...
Total votes 12: ↑8 and ↓4 +4
Views 18K
Comments 9

FuckItJS: принудительное исполнение JavaScript-кода

Abnormal programming *JavaScript *Designing and refactoring *
Американский веб-разработчик Мэтт Даймонд (Matt Diamond) написал библиотеку JavaScript под названием FuckItJS. Если вставить в код метод FuckIt, то он заставит исполняться самый плохой скрипт, «нравится это компилятору или нет».

В общем, FuckItJS работает так: из скрипта вырезаются все строчки, на которые выскочили ошибки. Процесс повторяется, пока скрипт (или что там от него осталось) не проходит компиляцию без ошибок. Чтобы выжить в этом жестоком мире, FuckItJS перезагружается после каждой итерации.
Читать дальше →
Total votes 89: ↑75 and ↓14 +61
Views 1.6K
Comments 24

Никто не умеет обрабатывать ошибки

Website development *Programming *.NET *
Из одной книги в другую, из статьи в статью кочует мнение о том, что выражение

try {
   //do something
}
catch(Exception ex) {
}

является плохой практикой. Возврат кодов – также плохая практика. Но становится ли нам, программистам, жить легче с этими знаниями и так уж ли они неоспоримы? И самый забавный вопрос – кто-нибудь в мире умеет грамотно обрабатывать ошибки, возникающие по ходу работы приложения? (под этим я понимаю обработку только тех ошибок, которые имеет смысл обрабатывать и вывод сообщений об ошибках, которые соответствуют действительно произошедшей, которые не вводят пользователя в замешательство, а в идеале и предлагают решение возникшей проблемы).
Подробности под катом
Total votes 70: ↑59 and ↓11 +48
Views 109K
Comments 121

Обработка ошибок в Node.js

Website development *JavaScript *Node.JS *
Translation
Tutorial


Пост содержит перевод статьи «Error Handling in Node.js», которую подготовили сотрудники компании Joyent. Статья была опубликована 28 марта 2014 года на сайте компании. Dave Pacheco поясняет, что статья призвана устранить неурядицу среди разработчиков, касаемо лучших практик работы с ошибками в Node.js, а так же ответить на вопросы, которые часто возникают у начинающих разработчиков.
Читать дальше →
Total votes 46: ↑43 and ↓3 +40
Views 62K
Comments 11

Обработка ошибок в Swift — меч и магия

Programming *Objective C *Functional Programming *Swift *
Translation
Если издали видно общую картину, то вблизи можно понять суть. Концепции, которые казались мне далекими и, прямо скажем, странными во время экспериментов с Haskell и Scala, при программировании на Swift становятся ослепительно очевидными решениями для широкого спектра проблем.

Взять вот обработку ошибок. Конкретный пример – деление двух чисел, которое должно вызвать исключение если делитель равен нулю. В Objective C я бы решил проблему так:

NSError *err = nil;
CGFloat result = [NMArithmetic divide:2.5 by:3.0 error:&err];
if (err) {
    NSLog(@"%@", err)
} else {
    [NMArithmetic doSomethingWithResult:result]
}

Со временем это стало казаться самым привычным способом написания кода. Я не замечаю, какие загогулины приходится писать и как косвенно они связаны с тем, что я на самом деле хочу от программы:

Верни мне значение. Если не получится – то дай знать, чтобы ошибку можно было обработать.

Я передаю параметры, разыменовываю указатели, возвращаю значение в любом случае и в некоторых случаях потом игнорирую. Это неорганизованный код по следующим причинам:

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

Каждый из этих пунктов – источник возможных багов, и все эти проблемы Swift решает по-своему. Первый пункт, например, в Swift вообще не существует, поскольку он прячет под капотом всю работу с указателями. Остальные два пункта решаются с помощью перечислений.
Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Views 15K
Comments 27

Главное преимущество Go

IT systems testing *Programming *Go *
Если спросить среднестатического Go-девелопера, какие есть преимущества у Go — скорее всего вы услышите уже знакомый перечень плюшек. О них уже написано немало, но очень часто обходится стороной другая вещь, гораздо более интересная — долгосрочный эффект тех или иных решений дизайна языка. Я хочу раскрыть эту тему чуть шире, которая на самом деле актуальна не только для Go. Но в данной статье я возьму для примера два аспекта — способ обработки ошибок в Go и систему тестирования и постараюсь показать, как дизайн языка вынуждает людей писать более качественный код.


Читать дальше →
Total votes 94: ↑70 and ↓24 +46
Views 37K
Comments 207

Размышления о способах обработки ошибок

Programming *Java *Scala *
Тема обработки ошибок сложна и неоднозначна. До сих пор нет какого-то оптимального подхода или группы подходов к этой проблеме. Все они страдают от тех или иных недостатков. В этой статье я хотел бы поделиться своими мыслями на эту тему, и что не менее важно, почерпнуть новые знания в комментариях.

Код в статье приводится на scala, однако рассматриваемый подход может быть реализован на многих других языках (c++ с помощью макросов, java с помощью JetBrains MPS и т.д.). Наиболее близким аналогом рассматриваемого подхода является способ обработки ошибок в haskell.
Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Views 19K
Comments 36

Как обойтись почти без исключений, заменив их уведомлениями

Издательский дом «Питер» corporate blog Java *Designing and refactoring *ООP *
Translation
Здравствуйте, Хабр.

Иногда попадаются статьи, которые хочется перевести просто за имя. Еще интереснее, когда такая статья может пригодиться специалистам по разным языкам, но содержит примеры на Java. Совсем скоро надеемся поделиться с вами нашей новейшей идеей по поводу издания большой книги о Java, а пока предлагаем ознакомиться с публикацией Мартина Фаулера от декабря 2014, которая до сих пор не была переведена на русский язык. Перевод сделан с небольшими сокращениями.
Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Views 25K
Comments 37

Обработка ошибок в Rust

Programming *System Programming *Rust *
Translation

Как и многие языки программирования, Rust призывает разработчика определенным способом обрабатывать ошибки. Вообще, существует два общих подхода обработки ошибок: с помощью исключений и через возвращаемые значения. И Rust предпочитает возвращаемые значения.



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



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


Читать дальше →
Total votes 37: ↑36 and ↓1 +35
Views 33K
Comments 73