Как стать автором
Обновить

Валидный код

Кодобред
1.
string[] strs = new List<string>().ToArray();* This source code was highlighted with Source Code Highlighter.


2.
class MyClass
{
   int a;
   public MyClass(int a)
   {
      try
      {
         this.a = a;
      }
      catch (Exception ex)
      {
         logger.Error(ex);
      }
   }
}
* This source code was highlighted with Source Code Highlighter.
Всего голосов 14: ↑5 и ↓9 -4
Просмотры 929
Комментарии 6

PHP_Exceptionizer: преобразование E_NOTICE в исключения (Exception)

PHP *
Очень простая, но полезная библиотека PHP_Exceptionizer позволяет преобразовывать нотисы (E_NOTICE), предупреждения (E_WARNING) и т. д. в исключения PHP.

// Где-то в начальном коде инициализации скрипта.
error_reporting(E_ALL);
if (<is debug mode active>) {
    $exceptionizer = new PHP_Exceptionizer(E_ALL);
    // И оставьте эту переменную, чтобы она не удалялась до окончания 
    // скрипта. Удаление переменной вызовет отключение PHP_Exceptionizer.
}
...
// Далее можно ловить нотисы как исключения:
try {
    echo $undefinedVariable;
} catch (E_NOTICE $e) {
    echo "Notice raised: " . $e->getMessage();
}
...
// Если вы ловите E_WARNING, то поймаете и E_NOTICE тоже:
try {
    echo $undefinedVariable;
} catch (E_WARNING $e) {
    echo "Warning or better raised: " . $e->getMessage();
}
...
// А можно и не ловить, тогда нотис вызовет завершение программы.
echo $undefinedVariable;

Читать дальше →
Всего голосов 68: ↑49 и ↓19 +30
Просмотры 2.4K
Комментарии 97

Обработка ошибок в Go: Defer, Panic и Recover

Программирование *
Перевод
В языке Go используются обычные способы управления потоком выполнения: if, for, switch, goto. Есть ещё оператор go, чтобы запустить код в отдельной го-процедуре. А сейчас я бы хотел обсудить менее обычные способы: defer, panic и recover.

Команда defer помещает вызов функции в список. Этот список отложенных вызовов выполняется после того, как объемлющая функция завершит выполнение. Defer обычно используется для упрощения функций, которые занимаются освобождением ресурса.

Например, посмотрим на функцию, которая открывает два файла и копирует содержимое из одного файла в другой:
Читать дальше →
Всего голосов 29: ↑28 и ↓1 +27
Просмотры 50K
Комментарии 14

Учим систему страничной адресации и обработке прерываний

Системное программирование *
Приветствую. Сегодня поговорим обо всём понемногу. Введём в нашу наработку paging, разберёмся с прерываниями и их видами. Напишем несколько функций, добавим сие в код из предыдущего поста.
Читать дальше →
Всего голосов 28: ↑23 и ↓5 +18
Просмотры 7.1K
Комментарии 14

Гарантии безопасности исключений

.NET *
Ошибки в обработке ошибок являются наиболее распространенным источником ошибок

Бредня, пришедшая в голову при написании этой статьи

Основные баталии по поводу того, что лучше использовать при программировании на C# – исключения или коды возврата для обработки, ушли в далекое прошлое (*), но до сих пор не утихают баталии другого рода: да, хорошо, мы остановились на обработке исключений, но как же нам их обрабатывать «правильно»?

Существует множество точек зрения о том, что же такое «правильно», большая часть из которых сводится к тому, что нужно перехватывать только те исключения, которые ты можешь обработать, а все остальные пробрасывать вызывающему коду. Ну, а в случае, если на верхний уровень пробралось дерзким образом непонятное исключение, то стрелять все приложение целиком, поскольку уже не понятно, находится ли оно, родимое, в согласованном состоянии или нет.

Существует множество «за» и «против» такого способа перехвата и обработки исключений, но сегодня я хочу рассмотреть несколько другую тему. А именно тему обеспечения согласованного состояния приложения в свете возникновения исключения – три уровня безопасности исключений.
Читать дальше →
Всего голосов 50: ↑45 и ↓5 +40
Просмотры 13K
Комментарии 41

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

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

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

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

Читать дальше →
Всего голосов 59: ↑52.5 и ↓6.5 +46
Просмотры 25K
Комментарии 13

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

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

ActiveRecord и мистически падающие спеки

Ruby on Rails *
Сегодня, занимаясь разработкой одного Ruby on Rails проекта обнаружил странную особенность: падают две spec-и. Ни у кого в проекте не падают, а у меня — падают. Код, gem-ы, система и софт один и тот же, только у меня спеки падают, а у других участников проекта — нет.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 1.2K
Комментарии 9

Централизованная обработка исключений в Node.JS

Node.JS *
Перевод


Преамбула от переводчика: пару месяцев назад я искал решение для возможности использовать исключения в сервере игры, написанном на node.js. К сожалению, исключения в чистом виде не совсем совместимы со средой, работающей на event loop'е. Легче всего это объяснить на примере:
try {
    process.nextTick(function() {
        throw new Error('Catch Me If You Can');
    });
} catch (e) {
    console.log('Exception caught:', e);
}

Это исключение, разумеется, не будет поймано, и оно уронит весь процесс. Месяц назад увидел свет node.js версии 0.8.0 со свеженьким (экспериментальным) модулем domain, который как раз призван решать подобные проблемы. Тем не менее, я бы хотел отдать дань классу, которым я пользуюсь до сих пор. Поехали:
Читать дальше →
Всего голосов 37: ↑28 и ↓9 +19
Просмотры 9.1K
Комментарии 11

Централизованная обработка исключений в Node.JS. Часть 2

Блог компании «Alawar Entertainment» JavaScript *Node.JS *


Четыре месяца назад я писал о том, как можно удобно ловить исключения в node.js, в том числе и асинхронные, то есть те, которые брошены кодом, который вызван event loop'ом. В той статье я использовал модуль control-block для борьбы с ними, так как стандартный блок try-catch не справлялся.

Как оказалось, примерно в то же время Adam Crabtree выпустил стабильную версию похожего на control-block модуля под названием trycatch.
Читать дальше →
Всего голосов 18: ↑15 и ↓3 +12
Просмотры 5.1K
Комментарии 20

Что нового в работе с исключениями в C++11

Программирование *C++ *
В интернете довольно много говорят о новых возможностях C++11: auto, lambda, variadic templates. Но как-то обошли стороной новые возможности работы с исключениями, которые предоставляет язык и стандартная библиотека.

От предыдущей версии стандарта остался механизм генерации исключений (throw), проверка того, что мы находимся в процессе обработки исключения (std::uncaught_exception), механизм остановки, если исключение не было обработано. Также есть иерархия стандартных исключений на базе класса std::exception.

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

Читать дальше →
Всего голосов 65: ↑60 и ↓5 +55
Просмотры 40K
Комментарии 42

Perl6 — Обработка исключений

Perl *Программирование *
1. Особенности работы с переменными и литералами в Perl6
2. Perl6 — Операции над переменными, анонимные блоки
3. Perl6 — Условные операторы, циклы
4. Perl6 — Работа с функциями
5. Perl6 — Классы
6. Perl6 — Ввод-вывод, модули
7. Perl6 — Комментарии, пробельные символы, скобки
8. Perl6 — Перегрузка операторов
9. Perl6 — Работа с типами данных
В прошлой статье я заикнулся об отлове исключений. Немногие скрипты, что встречались с исключениями, выживали, и слишком много моих скриптов погибло от их рук. Пожалуй, настало время устроить на них охоту. Для тех кому интересно, чем же мы будет их ловить — встречаемся под катом.
Читать дальше →
Всего голосов 19: ↑15 и ↓4 +11
Просмотры 5.6K
Комментарии 0

Управляемый PageFault в ядре Linux

Системное программирование *C *
Tutorial
Обработка исключений занимает важное место в процессе функционирования программных систем. Действительно, обеспечение своевременной и правильной реакции на нештатные события является одной из ключевых задач, выполняемых операционной системой и, в особенности, её ядром. Будучи современным, ядро Linux предоставляет возможность управления процессом обработки исключений, однако ввиду ограниченности его интерфейса, данный механизм не является распространённым среди разработчиков модулей ядра.

Далее, на примере PageFault будут рассмотрены некоторые особенности процесса обработки исключений, а также дано описание метода, позволяющего использовать данную возможность при разработке модулей ядра Linux для архитектуры x86.

Читать далее
Всего голосов 34: ↑33 и ↓1 +32
Просмотры 13K
Комментарии 2

Что же там такого тяжелого в обработке исключений C++?

Программирование *C++ *Компиляторы *
image
Исключения и связанная с ними раскрутка стека – одна из самых приятных методик в C++. Обработка исключений интуитивно понятно согласуется с блочной структурой программы. Внешне, обработка исключений представляется очень логичной и естественной.

Аккуратное использование стековых объектов позволяет создавать очень эффективный и безопасный код, где, в отличие от систем со сборкой мусора, сохраняется локальность ссылок, что дает возможность уменьшить число обращений к системе за памятью, снизить её фрагментацию, более эффективно использовать кэш памяти.

Тем не менее, в C++, исключения традиционно рассматриваются буквально как исключительные ситуации, связанные с восстановлением после ошибок. Трудно сказать, является ли это причиной или следствием того, что реализация обработки исключений компиляторами чрезвычайно дорога. Попробуем разобраться почему.
Читать дальше →
Всего голосов 91: ↑90 и ↓1 +89
Просмотры 67K
Комментарии 38

Окно сообщения об ошибке для WinForms и WPF приложений

Программирование *.NET *
Tutorial

Приветствую!

В статье посвященной моему профайлеру для Entity Framework-a, я вкратце описал примененную мной форму для сообщения пользователю об исключительной ошибке в приложении. После оценки количества скачиваний примера кода, было решено выделить этот пример в отдельный проект, а также добавить поддержку WPF приложений.
Исходники библиотеки вместе с примерами опубликованы на CodePlex под свободной лицензией MIT: https://uiexceptionhandler.codeplex.com/

Подробности под катом.
Читать дальше →
Всего голосов 33: ↑25 и ↓8 +17
Просмотры 17K
Комментарии 34

Размышления о блюзе — еще раз про exception handling

Анализ и проектирование систем *.NET *C# *
Из песочницы
Написано уже немало про обработку исключений в C#, написано хорошо и местами подробно, но я попытаюсь внести свою скромную лепту в этот вопрос. Данная статья является просто некой попыткой лучше осмыслить и систематизировать в рамках одной, пусть даже очень условной концепции возможные подходы к проблеме. Хорошая практика обработки исключений, на мой взгляд, освещена довольно скудно и не создает целостной завершенной картины, когда, как и где работать с исключительными ситуациями в коде.
Читать дальше →
Всего голосов 18: ↑8 и ↓10 -2
Просмотры 4.8K
Комментарии 6

Обработка исключений в асинхронном коде при переходе на .NET 4.5

.NET *C# *
Из песочницы
В посте я попытаюсь раскрыть подводные камни, которые возникают при обработке исключений в асинхронном коде в .NET 4 в контексте .NET 4.5

Если вам интересно, почему при некоторых условиях код из примера ниже завершит работу без необработанного исключения, добро пожаловать под кат.
Читать дальше →
Всего голосов 32: ↑30 и ↓2 +28
Просмотры 18K
Комментарии 15

В Rust 1.0 исключений не будет

Программирование *API *Rust *
Rust LogoСегодня Аарон Тюрон — разработчик, недавно присоединившийся к разработке Rust в Mozilla — объявил об отсрочке реализации какого-либо механизма исключений, кроме уже существующего макроса try! и типа Result, до неопределённого момента после первого релиза языка программирования Rust.

Это означает, что в Rust 1.0 будут отсутствовать исключения первого класса — то есть, полностью интегрированные с другими фичами языка.

Для обработки ошибок в данной момент в Rust существует тип Result { Ok(value), Err(why) } и макрос try!. Тип Result представляет из себя перечисление (enum), похожее на Option { Some(value), None } и связанное с ним по смыслу. Вариант None типа Option говорит об отстутствии значения, а вариант Err(why) типа Result уточняет, почему значение отсутствует.

Rust предлагает возвращать тип Result из функций, чтобы передавать значение возврата или причину, по которой значение вернуть не удалось. Макрос try! в свою очередь позволяет автоматически возвращать Err(why) из текущей функции, если вызов другой функции не удался (применяется к объекту типа Result).
Читать дальше →
Всего голосов 46: ↑41 и ↓5 +36
Просмотры 18K
Комментарии 81

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

C++ *
Из песочницы
Наверняка все знают прописную (в книгах про С++) истину о чудесной методологии RAII, если нет — приведу краткое описание из википедии.

Это шаблонное описание этой техники
Получение ресурса есть инициализация (англ. Resource Acquisition Is Initialization (RAII)) — программная идиома объектно-ориентированного программирования, смысл которой заключается в том, что с помощью тех или иных программных механизмов получение некоторого ресурса неразрывно совмещается с инициализацией, а освобождение — с уничтожением объекта.

Типичным (хотя и не единственным) способом реализации является организация получения доступа к ресурсу в конструкторе, а освобождения — в деструкторе соответствующего класса. Поскольку деструктор автоматической переменной вызывается при выходе её из области видимости, то ресурс гарантированно освобождается при уничтожении переменной. Это справедливо и в ситуациях, в которых возникают исключения. Это делает RAII ключевой концепцией для написания безопасного при исключениях кода в языках программирования, где конструкторы и деструкторы автоматических объектов вызываются автоматически, прежде всего — в C++.

Последнее предложение вроде как обещает 100% гарантию результата, но как всегда в жизни, а особенно в С++, есть нюанс.
Читать дальше →
Всего голосов 28: ↑23 и ↓5 +18
Просмотры 16K
Комментарии 45
1