Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Hello, World!
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  00:28[Войти] | [Зарегистрироваться]

Обсуждение материала
Обработка ошибок
Полный текст материала


Другие публикации автора: Александр Алексеев

Цитата или краткий комментарий:

«... Ошибки неизбежны, а совершать их – в природе человека. Поэтому к их возникновению нужно готовить себя заранее. Эта статья как раз и посвящена ошибкам, способам их обработки и диагностики. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]18100%
 
  Ничего особенно нового и интересного
[2]00%
 
  Написано неверно (обязательно укажите почему)
[3]00%
 
Всего проголосовали: 18

Оценка стиля изложения

  Все понятно, материал читается легко
[1]15100%
 
  Есть неясности в изложении
[2]00%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 15




Смотрите также материалы по темам:
[Потоки (нити) Threads] [Отладчик] [Указатели, работа с памятью] [Операторы, синтаксис языка.] [Классы] [Жизненный цикл] [Исключения (exceptions)] [Структура VCL-приложения] [Конструктор/деструктор класса] [Настройка среды (IDE)] [Утечки памяти]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 35

13-10-2012 08:00
Спасибо


03-06-2010 19:58
Фиг. 2 совершенно негодный в качестве иллюстрации описанных страшных ужасов. Девочка с ресепшена - да, вряд ли сможет сказать больше чем "там выскакивает какая-то ошибка". Программисту же ясно, что в строке N {00401A73-базовый адрес -> Find Error -> вуаля, модуль и строка} обнулился указатель и произошло это при обращении ко второму мемберу {00000008/SizeOf(LongWord) = 2; спекулирую, но очень типично}. Так что, фиг. 1 - символизирует, ибо, как максимум, сообщает о предстоящем допросе пользователя с целью выяснить, как же он такого добился; затруднения же с анализом фиг. 2, возможно, просто намекают разработчику на смену профессии.


11-03-2010 02:58
Грандиозно!
 chmv


15-02-2010 17:59
Спасибо, замечательная статья.


20-05-2009 13:29
Это скорей, пример, когда появление ошибки проблематично предупредить проверкой данных, поскольку она связана с реализацией конкретного механизма и его некорректным применением.
 Nat


20-05-2009 10:46
>>> Либо тщательно следить за списком указателей (что, правильно)
Хм... По-моему, именно так и никаких "либо".

>>> либо ловить AV.
>>> При этом, AV - ожидаемое событие, и даже не совсем ошибка.
Прочитал, и волосы на голове зашевелились ;-) Избаловала Вас Винда, не позволяя совершить фатальную ошибку. А вот если бы у Вас из-за неаккуратного программирования комп бы зависал (как это могло случиться при программировании под ДОС), то Вам бы тоже в голову не пришло использовать AV в качестве ожидаемого события.
 Geo


18-05-2009 21:33
Очень полезный материал. Правда, обработка ошибок еще не уложилась...
Полезное упоминание, насчет "вольны делать что угодно" и доверенной зоне.
Периодически задаюсь вопросом, вставлять в некую функцию проверки или нет.
Регулярно оказыватся, что в одних местах проверка и так производится перед вызовом...
В других местах, вроде как не так удобно делать проверки.
Как результат - дублирование проверок.
Как выход - основная функция без проверок + функция-проверка (преобразование) данных.

Есть у меня такая функция:
function nzd(VariantVal : Variant; ErrValue : Double = 0.0) : Double;
begin
  try
    result:=VariantVal
  except
    result:=ErrValue
  end;
end;
С точки зрения минимизации исключений... не комильфо. И с точки зрения отладки - может утомить сообщениями. В тот момент, ничего другого в голову не пришло. Зато работает.

Регулярно возникает желание проверить указатель на объект, есть там что или нет...
Всякие nil, assigned показывают только одно - был указатель присвоен, не был или уже сброшен мною же.
Там же где, особо надо - десять указателей и освобожденный объект - никак не поможет.
Либо тщательно следить за списком указателей (что, правильно), либо ловить AV.
При этом, AV - ожидаемое событие, и даже не совсем ошибка.
 Nat


09-04-2009 06:28
Весьма неплохо написана статья. Не хватает, на мой взгляд, описания стандартных функций, по получению данных из стека (или хотя бы упоминания, чтобы знать в какой стороне копать), потому что обсуждается только "сторонние компоненты" со словами "а чего мало -- можете дописать"...

Но для "усвояимости" -- надо перечитать еще разок...


08-04-2009 08:26
уф, наконец-то дочитал... но, лучше поздно, чем никогда. Интересная и познавательная статья. Теперь нужно еще раз подробно просмотреть, чтобы закрепить материал
 KaCT


29-03-2009 04:07
Автору респект за статью! Очень редко встретишь столь
ценный материал со столь грамотным стилем изложения. СПАСИБО!

> Большинство тут занимаются тем, что хвалят друг друга.

здесь явно не тот случай!


18-03-2009 02:03
Хочу поблагодарить автора статьи за такой огромный, и главное, ценный материал, который он подготовил и предоставил совершенно по нашенски (безвозмездно).
Лично для меня эта статья - бомба, спасибо!


16-03-2009 10:28
Очень полезная статья. Спасибо!
Мне кажется вообще уже давно нужна такая книга по паттернам обработки ошибок, чтобы под рукой был систематизированный набор правил.
Небольшое пожелание по pdf версии. Если можно в будущих редакциях переоформить блоки кода более удобочитаемыми, например, чтобы комментарии не продолжались на последующих строках.


02-03-2009 01:52
Хочу выразить благодарность автору. Лично мне эта статья (книга?) уже помогла правильно организовать обработку исключений в safecall методах.


24-02-2009 02:17
Поскольку задан очень высокий уровень материала, позволю себе попридираться :)
что не значит, что вы должны вызывать эту функцию в финальной версии "Не" можно потерять, особенно если она на другой строке, вообще я долго вникал всё-таки нужно её вызывать в финальной версии, или не нужно. Проще написать так ~ "Примечание: в финальной версии эту функцию вызывать не нужно".
Кроме того, пожелание на будущее (не сочтите за наглость): хотелось бы узнать особенности обработки ошибок в службах, например служба периодически находит в заданной папке файлы и добавляет записи в БД, файлы могут быть с неправильным форматом, отсутствовать сеть и т.п., ошибки не должны приводить к остановке, но кудато выводиться, только не на экран, Application.OnException использовать нельзя.
 Cep


24-02-2009 01:48
>>> Ээээ... может быть имелось ввиду RAISE ... AT ...?
*листает хелп* Блин! Точн, raise at. Лишнее доказательстов редкости использования данной опции :D
 Geo


24-02-2009 01:39
сообщение от автора материала
>>> добавьте в текст про RAISE описание опции ON
Ээээ... может быть имелось ввиду RAISE ... AT ...? (делает пометку в блокноте)


24-02-2009 01:03
Хорошая "статья" ;-)

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

Очень порадовал стиль изложения, когда правильно излагаются серьезные вещи, но язык изложения легкий и живой (плюс разумное количество шуток). Зачет!

Александр! Если планируете дальше развивать и перерабатывать маетирал, то у меня социальный заказ: добавьте в текст про RAISE описание опции ON. К чему это приводит и зачем это надо. По-моему, вещь хоть и редакя (для прикладного программиста), но разобраться стоит. А в хелпе этому моменту не уделено достаточно внимания.
 Geo


23-02-2009 09:41
bar:
Вы ничего не докажете. Большинство тут занимаются тем, что хвалят друг друга. Не спорю с тем, что мои статьи еще более далеки от совершенства. С другой стороны, человек, написавший такой объем в сочетании с красотой картинок чего-то стоит, но лично я статью не оценил :( Возможно, потому что не пытался вникнуть.


23-02-2009 09:34
To Ins:
Попробую подробнее пояснить свою позицию.
Во-первых, сам автор призывает, чтобы исключения были максимально информативными, и с этим  я полностью согласен. Генерация невнятного исключения только дезориентирует программиста.
Во-вторых, проверка параметров, это в значительной степени миф. Обычно можно проверить только указатели на NULL (или NIL). Если функция может совершить полезную работу при нулевом значении указателя, это не является ошибочной ситуацией, а если нулевой указатель недопустим, то нужно, либо генерировать точное сообщение об этом и прекратить исполнение ее кода, либо вообще ничего не проверять, так как попытка обращения по такому указателю все равно приведет к генерации исключения.
 bar


23-02-2009 02:10
А подход описанный в пункте 2.6.28. Если вызывающая сторона не выполняет контракт — вы вправе делать что угодно вообще вызывает недоумение.

Обеими руками поддерживаю подход, описанный в статье. В отлаженной программе не должно быть некоректных вызовов, и если при этом функция приведет к генерации исключения, то это сильно поможет найти в коде такой вызов и обезвредить его. Гораздо лучше, чем проигнорировать (или вернуть какой-то статус, который программист все равно забудет проверить) и получить ошибку совсем в другом месте непонятно из-за чего возникшую. И это в лучшем случае, в худшем же программист вообще не скоро может узнать, что у него в программе ошибка. А как известно, ошибка обнаруженная на стадии разработки, обходится в сотни раз дешевле, чем после того как продукт попадет к пользователям.

ЗЫ: Автору - зачет! Объем и качество проделанной работы - впечатляет!
 Ins


21-02-2009 13:53
сообщение от автора материала
>>> К сожалению 80% процентов статьи не соответствует заявленной теме, а посвящено отладке программ
Увы, ничего более путного мне в голову не пришло.


21-02-2009 12:08
Александр, я просто обалдел!
Честно, за раз всё прочесть не реально, но половину осилил! И много интересного узнал. Представляю, какой это труд. Я так думаю книга намечается? Если нет, то стоит подумать!


21-02-2009 10:15
К сожалению 80% процентов статьи не соответствует заявленной теме, а посвящено отладке программ (борьбе с программистскими ошибками).
Действительно полезными для неопытных программистов можно признать только несколько пунктов:
  2.6.15. Не пытайтесь обрабатывать ошибки написания кода
  2.6.25. Исключения — не всегда ошибки
и некоторые другие.
А подход описанный в пункте 2.6.28. Если вызывающая сторона не выполняет контракт — вы вправе делать что угодно вообще вызывает недоумение.
 bar


21-02-2009 03:56
Спасибо! Поставлю качать на ночь :)


21-02-2009 03:47
сообщение от автора материала
Вариант в PDF (5.6 Mb). Все рисунки + ссылки локальные.
http://dl.getdropbox.com/u/201788/DKArticlePDF.rar


21-02-2009 01:35
сообщение от автора материала
Статья (5.5 Мб) в mht (все ссылки (включая рисунки) ведут на online DK):
http://dl.getdropbox.com/u/201788/DKarticle.rar

Примеры:
http://delphikingdom.ru/zip/ErrorsDemos.rar


20-02-2009 10:08
Сделайте, пожалуйста, статью одним файлом и в архиве (туда же и демо можно). Думаю, что в наших интернет-реалиях не у меня одного трудности с открытием такой объемной страницы. Спасибо.


20-02-2009 08:18
сообщение от автора материала
>>> madExcept платен только для коммерческого использования. И стоимость его в таком случае чисто символическая
Да, честно говоря, я не очень знаком с madExcept - ставил один раз пощупать и поиграться. Но на сайте у них написано "you may use the non-commercial edition for 30 days of evaluation". Хотя да, лицензия с исходниками стоит $100 против $150 для EurekaLog.
А в общем и целом эти два продукта очень похожи.


20-02-2009 08:02
сообщение от автора материала
У меня действительно есть планы на продолжение, но они больше с уклоном в практическую диагностику и отладку, чем в сторону уязвимостей и безопасности.


20-02-2009 07:00
Ждем продолжение. Вот ссылки, которые можно взять в качестве источников.
http://msdn.microsoft.com/en-us/security/aa570401.aspx
http://www.owasp.org/index.php/Strings_and_Integers
http://blogs.msdn.com/jmeier/archive/2007/12/20/getting-started-with-threat-modeling.aspx


20-02-2009 06:16
Браво! Отличнейший материал. Все сразу слету не осилил, думаю раза с третьего осилю все:)
Да, madExcept платен только для коммерческого использования. И стоимость его в таком случае чисто символическая


20-02-2009 03:32
Очень редко бывают ситуации, когда приложение просто закрывается (вылетает) без всякого сообщения об ошибке Ну не так уж и редко, если дело касается Net. А вообще статья тянет на отдельную книгу, браво автору, читать всем.
 Cep


20-02-2009 01:34
И всё-таки её опубликовали :) Спасибо людям, выложившим здесь статью. По себе знаю - такой большой материал проанализировать не так просто.

Спасибо Александру за само желание так подробно осветить проблему! Огромная работа.

Правда, Александр так и не согласился назвать этот текст книгой :) По мне, данный материал вполне можно опубликовать.
 Yams


20-02-2009 01:32
Фундаментальный труд. Читал взахлеб, но с первого раза не осилил. Возможно, стоило разбить на цикл статей.


20-02-2009 00:29
Очень хорошая статья, даже я подчеркнул кое что для себя. Ценность в том, что все собрано в одном месте. Автору отлично.


Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Однажды, в студеную зимнюю пору я из лесу вышел, был сильный ЧТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования