Как обработать клас исключения SIGSEGV ?

Вопросы программирования и использования среды Lazarus.

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

Как обработать клас исключения SIGSEGV ?

Сообщение Leonius_Bad » 29.11.2012 19:23:16

Привет.
Возникла проблема. Написал программку, которая из XML файла строит дерево. Но XML при этом должен быть определенной структуры (соблюдая ее можно добавлять хоть сколько и хоть какие узлы), например, у каждого узла обязательно должен быть один параметр, у большинства узлов (есть узлы - исключения) должны быть текстовые значения (TextContent). Вот. Все работает прекрасно, если эта структура соблюдена, конечно. Если же попытаться загрузить "неправильный" XML, то выдает некрасивую ошибку Типа "Программа вызвала класс исключения External: SIGSEGV".

Вопрос вот в чем, как эту ошибку отловить и обработать? К примеру, чтобы выдавало "Упс. Ошибка" :)

Как можно быстрей нужен ответ=((((
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Как обработать клас исключения SIGSEGV ?

Сообщение evb87ar » 29.11.2012 21:25:19

Как можно быстрее читать про try...except ))
Аватара пользователя
evb87ar
новенький
 
Сообщения: 52
Зарегистрирован: 18.01.2012 21:08:02
Откуда: г. Архангельск

Re: Как обработать клас исключения SIGSEGV ?

Сообщение Leonius_Bad » 30.11.2012 05:12:29

Ну и смысл был в этом ответе??.. Не понимаю, если хотите показать, на сколько Вы умней, дык показывайте полностью:)))

Думаете, не пробовал я это? Вы мне конкретный пример приведите, ибо я не знаю, как называется этот класс, SIGSEGV не как Лазарус узнавать не хочет...
Что поставить после Except on ?
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07

Re: Как обработать клас исключения SIGSEGV ?

Сообщение Vadim » 30.11.2012 05:41:19

В подавляющем большинстве случаев SIGSEGV - это попытка доступа к участку памяти, которая ещё не выделена для программы. Поэтому ошибку нужно искать в коде Вашей программы. Никакие try..except Вам не помогут.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Как обработать клас исключения SIGSEGV ?

Сообщение evb87ar » 30.11.2012 10:11:15

Leonius_Bad, Вы сказали что вам надо отловить и обработать.
Ну так в чём проблема с try..except? При возникновении ошибки эта конструкция вам и позволит обработать системную ошибку.
А отловить - либо отладчик, либо бейте сомнительный участок кода на кусочки с помощью try...except и смотрите где происходит затык.

А так, Vadim совершенно точно сказал в чём проблема.

А по синтаксису try...except - получается вы не смотрели описание в интернете, т.е. не старались читать материал, описанный дцать раз.
Если всё-же лень искать, то конструкция будет выглядеть так (универсальная конструкция, обработчик для любых ошибок):

Код: Выделить всё
try
  <участок кода>
except
  on E:exception do begin
    <обработка ошибки>
    <e.message> - описание ошибки.
  end;
end;


Всё-же советую использовать отладчик и точки останова. Так вы сразу найдёте объёкт, которому не выделена память.
Аватара пользователя
evb87ar
новенький
 
Сообщения: 52
Зарегистрирован: 18.01.2012 21:08:02
Откуда: г. Архангельск

Re: Как обработать клас исключения SIGSEGV ?

Сообщение Leonius_Bad » 03.12.2012 14:57:47

А по синтаксису try...except - получается вы не смотрели описание в интернете, т.е. не старались читать материал, описанный дцать раз.

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

В общем, так понял, выход только в изменение кода так, чтобы он читал любые узлы в XML. А не только с определенными параметрами(атрибут есть\атрибута нет, текст есть\нет и тп). Но переписывать код не стал, ибо не успел бы. Сдал так, написав справку о необходимой структуре XML). Дай Бог, будет выше 3-ки...

Тему можно закрывать. Всем спасибо)
Leonius_Bad
новенький
 
Сообщения: 51
Зарегистрирован: 29.11.2012 19:18:07


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru