.NET → В каждом .net приложении резервируется память для трех исключений
На выходных заходил я к своему другу new_s в гости и он показал мне интересную вещь. Ему по работе нужно было анализировать дамп памяти .net приложения, где он искал утечки памяти и другое аномальное поведение и показал мне, что при старте любого .net приложения окружение резервирует память для трех исключений:
И это нормальное поведение. Почему?
- ExecutionEngineException
- StackOverflowException
- OutOfMemoryException
И это нормальное поведение. Почему?
C++ → Обработка Segmentation Fault в C++ из песочницы
Вводная
C++ является «небезопасным» («unmanaged») языком, поэтому программы могут «вылетать» — аварийно завершать работу без сохранения данных пользователя, сообщения об ошибке и т.п. — стоит только, например, залезть в не инициализированную память. Например:
void fall()
{
char * s = "short_text";
sprintf(s,"This is very long text");
}
или
void fall()
{
int * pointer = NULL;
*pointer = 13;
}
Всем было бы лучше, если бы мы могли «отловить» падение программы — точно так же, как в java ловим исключения — и выполнить хоть что-то перед тем, как программа упадет (сохранить документ пользователя, вывести диалог с сообщением об ошибке и т.п.)
Общего решения задача не имеет, так как C++ не имеет собственной модели обработки исключений, связанных с работой с памятью. Тем не менее, мы рассмотрим два способа, использующих особенности операционной системы, вызвавшей исключение.
C++ → Коды возврата & исключения
Замечательные статьи публиковались в последнее время, хотелось бы добавить ещё несколько абзацев по данной теме.
Уважаемые авторы предыдущих топиков как-то упускали тот момент (или мне показалось? или это само-собой подразумевается?) что exceptions возникли как инструмент для решения весьма утилитарной задачи —
Уважаемые авторы предыдущих топиков как-то упускали тот момент (или мне показалось? или это само-собой подразумевается?) что exceptions возникли как инструмент для решения весьма утилитарной задачи —
PHP → Исключение != ошибка
Многие программисты почему-то считают, что исключения и ошибки — это одно и то же. Кто-то постоянно кидает exception, кто-то через errorHandler превращает ошибки в исключения. Некоторые пытаются увеличить производительность, используя исключения. Но, на самом деле, exception и ошибки — это совершенно разные механизмы. Не надо одним механизмом заменять другой. Они созданы для разных целей.
Когда появился php5 с исключениями, а затем ZendFramework, который всегда кидает исключения — я не мог понять: чем же exception лучше моего любимого trigger_error()? Долго думал, обсуждал с коллегами и разобрался в этом вопросе. Теперь я чётко знаю, где использовать trigger_error(), а где throw new Exception().
В чём же принципиальная разница между ними?
Когда появился php5 с исключениями, а затем ZendFramework, который всегда кидает исключения — я не мог понять: чем же exception лучше моего любимого trigger_error()? Долго думал, обсуждал с коллегами и разобрался в этом вопросе. Теперь я чётко знаю, где использовать trigger_error(), а где throw new Exception().
В чём же принципиальная разница между ними?
Windows Phone → Упало приложение? AppHub Windows Phone и отчетность о крахах
Лирическое отступление
Однажды, при собеседовании в одну компанию мне задали вопрос «Есть приложение, которое вдруг падает, пользователь обижен и больше не хочет запускать это приложение, никакие формы обратной связи заполнять не настроен, как разработчику узнать об этом инциденте?».
Тогда я не знал, как ответить на данный вопрос, я предполагал вести лог, и при каждом запуске программы проверять его, предполагал отлавливать на уровне Application все исключения и автоматически отправлять разработчику stack-trace и тп, но как оказалось, все намного проще.
В данной вольной статье-переводе я и опишу то, как это можно сделать используя AppHub.
Программирование → Умные эксепшены из песочницы
Недавно ковырял паттерны проектирования и попутно пытался переделать один проект на эксепшены. Из этого коктейля родилось несколько мыслей, которыми хочется поделиться с общественностью.
Персональные блоги → Мысли по поводу генерации и обработки исключений
На основании своего личного опыта, выработал некую концепцию работы с исключениями. Данная концепция «заточена» для приложений, основанных на бизнес-процессах. Для системных и прочих программ она может оказаться малоэффективной. Т.к. я преимущественно использую .Net, то примеры иключений приведены для .Net-платформы.
PHP → Правильная обработка ошибок в PHP
Что я понимаю под правильной обработкой:
- Универсальное решение, которое можно вставить в любой существующий код;
- Легко расширяемое решение;
- В PHP аж три «механизма ошибок»: собственно ошибки (error), исключения (exception) и утверждения (assertion). Свести три механизма к одному — exception. В комментариях к предыдущей статье на эту тему выражалось мнение, что exception это плохой и/или сложный метод обработки ошибок. Я так не считаю и готов это обсудить в комментариях;
- Опциональное логирование;
- Общий обработчик exception, который будет поддерживать разные форматы вывода и debug/production режимы;
- В debug режиме должен выводится trace. Требования к trace: компактный, понятный и по возможности ссылки на открытие файлов в IDE.
Персональные блоги → MySQL получение блокирующих ограничений(констреинтов) при удалении записей, мини HowTo
Иногда, не буду говорить что часто, скорее даже редко, возникает обозначенная задача, узнать — записи в каких таблицах блокируют удаление текущей записи, своими внешними ссылками.
CodeIgniter → Доработка стандартного механизма обработки ошибок в CodeIgniter
CodeIgniter предоставляет неплохие возможности по обработке ошибок, но мне они показались недостаточными по следующим причинам:
Будем это исправлять =)
- отсутствует возможность обработки исключений
- отсутствует возможность уведомлять администратора сайта о возникающих ошибках через почту
- довольно скудная информацию о возникающих ошибках (в фреймворке с которым я работал раньше текст ошибки дополняется дампом глобальных переменных, что очень сильно облегчает процесс отладки, хотелось бы подобную схему увидеть и в CodeIgniter)
Будем это исправлять =)