![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try..except [D6, WinXP]
Hit © (2005-10-18 13:19:00)Мастера, помогите.
Пишу код и решил заюзать raise вместо возвращения кода ошибки из функции. Все шло нормально, но потом на одной из процедур после raise, я вижу свое сообщение(отлаживаюсьс IDE), но дальше какой-то мусор вместо перехода в верхний обработчик ошибок:
Project test.exe faulted with message: 'application-defined exception (code 0x0eedfade) at 0x77e73887'. Process Stopped. Use Step or Run to continue.
Куда рыть?
evvcom (2005-10-18 15:40:00) [41]
> Та нету у меня длл.... поэтому и не обратил.
Это как же это ты без kernel32, user32, gdi32 dll работаешь? Без единой библиотеки! Ну ка расскажи-ка нам...
Hit (2005-10-18 15:29:00) [42]Та нету у меня длл.... поэтому и не обратил.
В настройках делфи галочки стоят у:
Delphi EAbort Exceptions
Microsoft DAO Exceptions
VisiBroker Internal Exceptions
CORBA System Exceptions
и у Stop on Delphi Exceptions
evvcom (2005-10-18 15:24:00) [43]На [1] ты не обратил внимания? По каким адресам размещается твоя программа? Почему исключение
at 0x77e73887, т.е. по такомуадресу?
Hit (2005-10-18 15:18:00) [44]Народ ау...
Hit (2005-10-18 15:12:00) [45]И еще, еси запускать без делфи, то прога ничего не выдает - уходит в небытие....
Hit (2005-10-18 14:36:00) [46]
> Прежде всего, показать откуда оный raize вызывается,
> (консоль, thread, etc), его код. И что есть "верхний обработчик".
Есть поток, который в методе Synchronize дергает методы из других юнитов.
Так вот, один такой метод(в котором трабл) выглядит так(упрощенно):
procedure TMyClass.DoSomething();
begin
try
DoSomething1();
DoSomething2(); // после того как тут срабатывает raise, почему-то обработчик не уходит в блок except, а идет к методу DoSomething3
DoSomething3();
except
rasie; // re-raising для передачи в поток
end;
end;
procedure TMyClass.DoSomething1();
begin
if IsTrue() then
begin
...
end else
begin
raise Exception.Create('Error in DoSomething1');
end;
end;
procedure TMyClass.DoSomething2();
begin
//тут работаю с БД
if IsTrue() then
begin
...
end else
begin
raise Exception.Create('Error in DoSomething2');
end;
end;
DoSomething3 не привожу, так как до него не доходит.
Leonid Troyanovsky (2005-10-18 13:50:00) [47]
> Hit (18.10.05 13:19)
> Куда рыть?
Прежде всего, показать откуда оный raize вызывается,
(консоль, thread, etc), его код. И что есть "верхний обработчик".
--
Regards, LVT.
han_malign (2005-10-18 13:26:00) [48]Tool->Debugger Options->Language Exceptions
- вот туда и рой...
З.Ы. А вот насчет исключения из DLL("at 0x 77e73887") - не уверен, что все так гладко и просто...