![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Написание обработчика исключительных ситуаций... [D5, Win2k, WinXP]
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