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

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Обработка исключений free_pascal

Сообщение Mikhail » 05.11.2015 13:44:02

Лекс Айрин писал(а):Вам шашечки или ехать?


:? Учи мат часть! :)

Лекс Айрин писал(а):угу... это позиция страуса. В большинстве случаев совсем не обязательно ласты клеить. И, кстати, как раз за эту привычку я и не люблю форточки.


Но причем здесь исключения? :)

Лекс Айрин писал(а):Хотя бы затем чтобы уменьшить проблемы с программой.

Каким образом?

Лекс Айрин писал(а):Ведь исключение не всегда правильно может работать с остальным кодом.

С каким например?

Лекс Айрин писал(а):Не может этого быть. Скорее, лично Вы его просто не замечаете.

Я как раз замечаю оверхед, но Вы не понимаете почему и где он происходит. И еще, исключения должны возникать редко - это исключительная ситуация, а не обычная.

Лекс Айрин писал(а):А это, как раз, вызов служебных функций и обработка исключений методами операционной системы (которые зачастую программа перехватывает).

Это происходит всегда, вне зависимости от того используете Вы исключения или нет. Кстати, не для всех исключений используются вызовы ОС, вроде бы.

Лекс Айрин писал(а):Как лично Вам это не покажется странным, но это правда. Минимальное следование этим правилам позволило исключить ошибки в программе как класс.


Несколько самонадеянное заявление. :D
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Обработка исключений free_pascal

Сообщение Лекс Айрин » 05.11.2015 14:16:08

Mikhail писал(а):Учи мат часть!

Я то учил... а вы не пробовали?

Mikhail писал(а):Но причем здесь исключения?

Показ синего экрана это и есть позиция страуса.

Mikhail писал(а):Я как раз замечаю оверхед, но Вы не понимаете почему и где он происходит. И еще, исключения должны возникать редко - это исключительная ситуация, а не обычная.

Угу... но их сама конструкция, инициирующая вызов обработчика вызывается каждый раз. И не один раз. Неявный обработчик создается при многих вызовах функций.

Mikhail писал(а):Это происходит всегда, вне зависимости от того используете Вы исключения или нет. Кстати, не для всех исключений используются вызовы ОС, вроде бы.

угу... как же... как раз таки для ВСЕХ. Просто программа добавляет в вызов обработчика свой функционал. Это позволяет всегда ловить ошибку, даже если вы о ней не подозреваете. Часть обработки добавляется компилятором.

Исключение это прерывание, которое имеет аппаратную поддержку процессора. И оверхед это как раз вызов этого прерывания, его обработка и возврат в программу. И добавление своего обработчика перед служебным это стандартный функционал ОС.

Конечно, компилятор может передать программисту уже частично обработанный вызов обработчика прерывания (код возврата)

Mikhail писал(а):Несколько самонадеянное заявление


Что плохого в мании величия?

А если серьезно, то никто из знакомых не обнаружил ошибок. Неработающий функционал -- вполне (странно ему не быть в недописанной программе), неправильная работа тоже (по той же причине), а вот ошибок не было. Постепенно я все исправляю (или исключаю, если моих знаний не хватает). Упор делается именно на исправление ошибок роняющих программу. А потом все остальное. Ну и расширение функционала идет на последнем месте. Это не главное.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Обработка исключений free_pascal

Сообщение Mikhail » 05.11.2015 14:48:40

Лекс Айрин писал(а):Я то учил

Но не выучил... :)
Лекс Айрин писал(а):Показ синего экрана это и есть позиция страуса.

ОМГ :D

Лекс Айрин писал(а):Угу... но их сама конструкция, инициирующая вызов обработчика вызывается каждый раз. И не один раз.

Вот установка обработчика, где вызов системной функции?
Код: Выделить всё
xor edx,edx
push ebp
push $0044ce34
push dword ptr fs:[edx]
mov fs:[edx],esp


Лекс Айрин писал(а):Неявный обработчик создается при многих вызовах функций.

О том и речь, компилятор сам вставляет, например try finally end при работе со строками.

Лекс Айрин писал(а):Исключение это прерывание, которое имеет аппаратную поддержку процессора.

Неверно - учите мат часть! :D Вы путаете исключения процессора, SEH, исключения в FPC называются одинаково, но работают по разному! Да в случае деления на ноль сработает аппаратное исключение и посредством SEH попадет в Вашу программу, где будет обернуто в исключение FPC, но это касается не всех исключений!

Лекс Айрин писал(а):Что плохого в мании величия?


Это не мания величия - это некомпетентность. :D
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Обработка исключений free_pascal

Сообщение Лекс Айрин » 05.11.2015 15:25:49

Mikhail писал(а):ОМГ


Я, например, только через несколько лет использования линукса узнал, что у него есть такое понятие как Kernel Panic (являющийся аналогом BSOD) И никогда не видел его во время работы операционки. (у меня даже программы почему-то не падали)

Mikhail писал(а):Вот установка обработчика, где вызов системной функции?

Стоп! при чем здесь вызов? Он вообще идет в другой части кода. А это есть помещение данных в стек для возможности каскадного вызова обработчиков. И что-то подсказывает, что код или не полный или вы дали слишком много.


Mikhail писал(а):но это касается не всех исключений!

Угу... а Вы не учитываете, что есть еще и прерывания от аппаратуры? Прерывание таймера... Да, большая часть исключений не обрабатывается программой, но только потому, что ей это не нужно... (для этого есть драйвера и системные обработчики) Ах да... обработка программных исключений ничем не не отличатся от аппаратных. Вызов, да, но не обработка.

Mikhail писал(а):Это не мания величия - это некомпетентность.


Если некомпетентность позволяет мне писать программы без ошибок (или с минимумом), то пусть оно будет так.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Обработка исключений free_pascal

Сообщение Mikhail » 05.11.2015 15:49:51

Лекс Айрин писал(а):Стоп! при чем здесь вызов?

Еще раз - ты утверждал что установка обработчика ошибки занимает много времени, по коду видно что не так уж и много. Сколько займет вызов абсолютно не важно ибо это происходит редко.

Лекс Айрин писал(а):Угу... а Вы не учитываете, что есть еще и прерывания от аппаратуры? Прерывание таймера...


Что то совсем бред пошел... :) Процессор содержит транзисторы, Волга впадает в Каспийское море... я тоже там могу. :wink:
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Обработка исключений free_pascal

Сообщение Лекс Айрин » 05.11.2015 16:26:40

Mikhail писал(а):Еще раз - ты утверждал что установка обработчика ошибки занимает много времени,

Попробуйте прочитать Ваш вопрос... Чисто так, для интереса. И, кстати, специально поискал момент о котором речь -- там я говорил немного о другом. Даже при этом, установка/снятие обработчика это зачастую лишний код и со временем набегает очень много обработчиков, как этого избежать можно узнать и на этом сайте.

Mikhail писал(а):Что то совсем бред пошел...

А ведь я специально проверил не надеясь на память.... например прерывание мыши, которое программа получает в строго обработанном виде, имеет номер 33h. клавиатуры 09h... список длинный.

Напрямую в программу попадает обработка очень не многих прерываний (если не пользоваться специальными директивами), да и попадая она отделяется от их штатного вызова, обретая программное воплощение в виде так понравившейся вам SEH. (try .. exception).

ЗЫ: и не пользуйся, пожалуйста, приемами троллей. Это мало кому идет и уж не на этом форуме. Тем более такими грубыми. Поверь, они меня не задевают.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Обработка исключений free_pascal

Сообщение sts » 05.11.2015 16:50:34

исключения в паскале не имеют отношения к "hardware exceptions"
блок try .. except ничего не стоит по сравнению с другими способами возврата ошибки
по сути, в первую очередь, это синтаксический сахар, во вторую какойто дополнительный функционал (exception объект а не просто код ошибки)
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Обработка исключений free_pascal

Сообщение Лекс Айрин » 05.11.2015 17:16:20

sts писал(а):исключения в паскале не имеют отношения к "hardware exceptions"

Вы это гарантируете? А как, по вашему, приложение получает например, исключение "деление на ноль"?

sts писал(а):по сути, в первую очередь, это синтаксический сахар,

тогда это еще один повод пользоваться им как можно реже.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Обработка исключений free_pascal

Сообщение sts » 05.11.2015 18:55:29

Лекс Айрин писал(а):
sts писал(а):исключения в паскале не имеют отношения к "hardware exceptions"


Вы это гарантируете? А как, по вашему, приложение получает например, исключение "деление на ноль"?

и? к чему вы это написали? хардварное "деление на ноль" порождает программное "деление на ноль"
или вы решили потролить?
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Обработка исключений free_pascal

Сообщение Лекс Айрин » 05.11.2015 19:32:56

sts писал(а):хардварное "деление на ноль" порождает программное "деление на ноль"


Нет, программного исключения "деление на ноль" не существует. Есть обработчик, который повешен на стандартный обработчик соответствующего аппаратного прерывания системы. И системный обработчик прерывания последний в списке обработчиков (в идеале, он даже не получает управления, если прерывание обработано).
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Обработка исключений free_pascal

Сообщение Mikhail » 05.11.2015 20:36:33

Лекс Айрин писал(а):Нет, программного исключения "деление на ноль" не существует. Есть обработчик, который повешен на стандартный обработчик соответствующего аппаратного прерывания системы.

Ты троль ?
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Обработка исключений free_pascal

Сообщение Лекс Айрин » 06.11.2015 09:42:21

Mikhail, не здесь.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Обработка исключений free_pascal

Сообщение Дож » 06.11.2015 11:07:03

Лекс Айрин писал(а):Нет, программного исключения "деление на ноль" не существует.

EDivByZero не существует? :)
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Обработка исключений free_pascal

Сообщение sts » 06.11.2015 11:39:29

если Лекс Айрин действительно не понимает то придется на пальцах объяснять... но чето я сомневаюсь.
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Обработка исключений free_pascal

Сообщение Лекс Айрин » 06.11.2015 11:51:32

Дож, любое, даже аппаратное исключение, можно вызвать программно. Например, чтобы включить его дальнейшую обработку другим обработчиком. Но это не значит, что это разные типы исключений. Просто современных операционках программист получает более легкий способ установить/снять обработчик прерывания. И С точки зрения процессора обработчик это всего лишь дескриптор в таблице IDT. И смена обработчика это манипуляция данными в этой таблице.

Добавлено спустя 1 минуту 30 секунд:
sts, я понимаю специфику обработки прерываний. Как то пришлось подучить.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

Рейтинг@Mail.ru