Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Написание обработчика исключительных ситуаций... [D5, Win2k, WinXP]


Страницы:   1 2

TankMan ©   (2004-11-18 17:50:00) 

Не мог бы кто подсказать, вообще как можно сделать обработчик не просто выдающий тип исключительной ситуации, но еще и говорящий в какой строке была вызвана эта ошибка, но хотябы в каком модуле?


TankMan   (2004-11-19 13:56:00) [21]

А зачем я тогда спрашиваю?


Digitman   (2004-11-19 13:33:00) [22]


> Игорь Шевченко ©   (19.11.04 11:14) [10]


> сколько в VCL одинаковых исключений ?


а по пояс сколько их ...
хреновый алгоритм всегда даст повод для заболевания геморроем


> EAccessViolation я не смогу сказать/предположить даже где
> примерно была вызвана ошибка


не надо ля-ля.

как раз именно это искл-е дает тебе исчерпывающую инф-цию о строке, где ты сотворил галиматью


TankMan   (2004-11-19 13:28:00) [23]

>>Digitman
Ну уж например EListError у меня точно не будет :)
Не в этом дело, дело в том что у меня достаточно много циклов и достаточно много обработки разных структур данных, проэкт не маленький - при загрузке программа подгружает настройки из файла конфигурации, в классы оболочки динамически созданных массивов, и уже потом , в памяти много чего с ними делается, и если возникнет ситуация EConvertError или EAccessViolation я не смогу сказать/предположить даже где примерно была вызвана ошибка и какими действиями, потому как на одно событие происходит множество операций над данными, что не позволяет хоть как-то примерно сказать по типу ошибки, где была вызвана она и "благодаря" чему...яж не блокнот пишу...

>>Игорь Шевченко
Еще раз спасибо...


KSergey   (2004-11-19 11:53:00) [24]

> [10] Игорь Шевченко ©   (19.11.04 11:14)
> KSergey ©   (19.11.04 07:36) [7]
> А там, где ты читал, не написано ? Дай ссылочку, мне тоже
> интересно

Ничего не помню, было давно. Вполне вероятно - что путаю.


Игорь Шевченко   (2004-11-19 11:14:00) [25]

TankMan ©   (19.11.04 08:08) [8]

Качай всю Jcl - пригодится.

KSergey ©   (19.11.04 07:36) [7]

А там, где ты читал, не написано ? Дай ссылочку, мне тоже интересно

Digitman ©   (19.11.04 10:14) [9]

Ой. А сколько в VCL одинаковых исключений ?


Digitman   (2004-11-19 10:14:00) [26]


> TankMan ©   (18.11.04 17:50)


imho, это бестолковая и лишняя затея

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


TankMan   (2004-11-19 08:08:00) [27]

>>Игорь Шевченко
Спасибо за помощь, только нельзя ли уточнить (что совсем точно было %) ), мне качать JCL Releases 1.93 или там где-то отдельные модули можно найти? Я почему спрашиваю - меня слово Releases смущает :( а у меня инет мееееедленный мееедленный :(

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


KSergey   (2004-11-19 07:36:00) [28]

Люди, скажите, как для JclDebug.pas влинковать map-файл в exe-шник? Вроде читал что можно, но не пойму как...


GuAV   (2004-11-18 19:51:00) [29]

2 Defunct

IMHO лучше не пересоздавать исключение, а воспользоваться уже созданным.

  try
    <код>
  except
    on E: Exception do
      begin
        E.Message := Format('Ошибка в модуле unit1, в процедуре "xxx"' + sLineBreak + 'Тип исключения %s' + sLineBreak + '%s', [E.ClassName, E.Message]);
        Raise;
      end;
  end;


Defunct   (2004-11-18 19:05:00) [30]

> А не замучаетесь в каждую процедуру такой обработчик вставлять?

Да мне собсно это и не нужно. Просто было интересно рассмотреть, как вариант.


vuk   (2004-11-18 18:46:00) [31]

to Defunct ©   (18.11.04 18:38) [2]:
А не замучаетесь в каждую процедуру такой обработчик вставлять?
К тому же JCL гораздо больше полезной информации выдает. Типа трассировки стека. И без переделки всего приложения.


Суслик   (2004-11-18 18:43:00) [32]


> // можно также добавить имя класса и идентификацию искл.

а еще можно номер строки - снизу слева посмотреть :)


Defunct   (2004-11-18 18:38:00) [33]

Игорь Шевченко ©

Игорь, а как вы считаете такой подход:

unit unit1;
...

procedure xxx;
begin

 Try
   <код>
 Except
   Raise Exception.Create('Ошибка в модуле unit1, в процедуре "xxx"');
   // можно также добавить имя класса и идентификацию искл.
 end;

end;


И один глобальный обработчик, на OnException


Игорь Шевченко   (2004-11-18 17:52:00) [34]

http://www.delphi-jedi.org

JCL, unit JclDebug.pas


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо