Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2014, 19:16   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Попробуйте сами, а потом уж говорите.
Ладно. Признаю твою правоту. Вот только описание класса не даст все равно точного ответа на вопрос:
Цитата:
что именно вызвало ошибку?
Учитывая что в ловце исключний могут давать сбой разные операторы с одним и тем же классом исключения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 19:44   #12
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ладно. Признаю твою правоту. Вот только описание класса не даст все равно точного ответа на вопрос:
Учитывая что в ловце исключний могут давать сбой разные операторы с одним и тем же классом исключения.
На самом деле всё может быть гораздо хуже - повреждение памяти, разрушение стэка, кривое связывание и т.п.. Исключение будет бросать совершенно из произвольных мест в произвольное время. Механизм в принципе становится бесполезным. Качественно ловить такое лично я не умею - приходится проводить полный код-ревью с постепенным отключением всего функционала =-)
PS: помню как в одно время переставлял по коду asm nop end - удачно размещенный он предотвращал краш приложения %)
StriderX вне форума Ответить с цитированием
Старый 08.08.2014, 19:59   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
приходится проводить полный код-ревью с постепенным отключением всего функционала =-)
Аналогично. Впрочем адрес кода, который вызвал исключение уже говорит о многом. Даже SIGSEGV может сказать где "упало" с высокой точностью. Это конечно если уметь анализировать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 20:19   #14
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,403
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ага )))
Выдаст 'Exception' и гадай потом какой из них.
Это да Бывает такого тоже . Я на пример реализовал так

Код:
 if Условия 1 then
  begin
      действия 1 
    end
  else
   begin
        MessageDlg('Имя ошибки 1',mtError,[mbOK],0)
  end
  else
 if Условия 2 then
  begin
      действия 2 
    end
  else
   begin
        MessageDlg('Имя ошибки 2',mtError,[mbOK],0)
   end
  else
 if Условия 3 then
  begin
      действия 3 
    end
  else
   begin
        MessageDlg('Имя ошибки 3',mtError,[mbOK],0)
   end
Чтобы не попал такого непонятной ситуаций
xxbesoxx вне форума Ответить с цитированием
Старый 08.08.2014, 20:49   #15
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от StriderX Посмотреть сообщение
На самом деле всё может быть гораздо хуже -
Вот пример с анализом ситуации
http://alexander-bagel.blogspot.ru/2014/01/217.html
northener вне форума Ответить с цитированием
Старый 08.08.2014, 21:07   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я на пример реализовал так
Ну это у тебя не рабочий код )
Тут ошибки синтаксические.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.08.2014, 22:01   #17
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,403
По умолчанию

А где ошибка ?
xxbesoxx вне форума Ответить с цитированием
Старый 08.08.2014, 22:38   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 if Условия 1 then
  begin
      действия 1 
    end
  else
   begin
        MessageDlg('Имя ошибки 1',mtError,[mbOK],0)
  end
  else
 if Условия 2 then
В отличие от "десу", "ельзок" слишком много бывает
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.08.2014, 12:29   #19
xxbesoxx
Участник клуба
 
Аватар для xxbesoxx
 
Регистрация: 10.08.2010
Сообщений: 1,403
По умолчанию

Нет не согласен ! Давайте посмотрим реальный простой пример из рабочий проекта
Код:
procedure TfrmUsersAddChange.btnSaveClick(Sender: TObject);
begin
  {*** Проверка Edit ! Задано или нет параметр }
   if edtu_First_Name.Text = '' then
    begin
      Beep();
      MessageDlg('სახელი აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
      if  edtu_First_Name.CanFocus then edtu_First_Name.SetFocus;
      Abort;
    end
     else
    if edtu_Last_name.Text = '' then
    begin
      Beep();
      MessageDlg('გვარი აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
      if edtu_Last_name.CanFocus then edtu_Last_name.SetFocus;
      Abort;
    end
      else
    if edtu_patronymic.Text = '' then
      begin
        Beep();
        MessageDlg('მამის სახელი აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
        if edtu_patronymic.CanFocus then edtu_patronymic.SetFocus;
        Abort;
      end
    else
     if edtu_Pasport_Number.Text = '' then
      begin
        Beep();
        MessageDlg('პასპორტის№ აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
        if edtu_Pasport_Number.CanFocus then edtu_Pasport_Number.SetFocus;
        Abort;
      end
       else
     if edtu_Adress.Text = '' then
    begin
      Beep();
      MessageDlg('მისამართიი აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
      if edtu_Adress.CanFocus then edtu_Adress.SetFocus;
      Abort;
    end
      else
     if  cbbu_Status.Text = '' then
    begin
      Beep();
      MessageDlg('სტატული აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
      if cbbu_Status.CanFocus then cbbu_Status.SetFocus;
      Abort;
    end
      else
     if  edtu_Login.Text = '' then
    begin
      Beep();
      MessageDlg('ლოგინი აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
      if edtu_Login.CanFocus then edtu_Login.SetFocus;
      Abort;
    end
       else
     if  edtu_Password.Text = '' then
      begin
        Beep();
        MessageDlg('პაროლი აუცილებლად უნდა იყოს შევსებული', mtError,[mbOK],0);
        if edtu_Password.CanFocus then edtu_Password.SetFocus;
        Abort;
      end
     else
    if frmUsersAddChange.Caption = 'ახალი მონაცემის შეტანა' then
     begin
       frmMain.UsersInsert; // Здесь тоже процедура 
       frmUsersAddChange.Close;
     end
    else
  if frmUsersAddChange.Caption = 'მონაცემის რედაქტირება' then
   begin
     frmMain.UsersUpdate; // вызываю процедуру на выполнение . Он на на другом форме в разделе  public
     frmUsersAddChange.Close; // После выполнение закрываю форму 
   end;
end;
Тоже самое конструкция и работает правильно :D

Последний раз редактировалось xxbesoxx; 09.08.2014 в 12:32.
xxbesoxx вне форума Ответить с цитированием
Старый 09.08.2014, 14:09   #20
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Алгоритмические ошибки нас учили исправлять и учитывать ещё с самоучителя по Delphi 7. Программист должен учитывать все варианты.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск