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

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

Access violation [D7, Win2k, WinXP]


Страницы:   1 2

mid ©   (2004-11-24 12:11:00) 

Кто подскажет как отловить что происходит?

На Delphi7 написан сервер приложений работает c БД круглосуточно в режиме 7x24.
Все хорошо если не одно но, по непонятной причине и с непонятной
переодичностью примерно раз в (3-5 дней) вылетает Access violation и на этом все заканчивается.


KSergey1   (2004-11-26 17:26:00) [1]

> ShotGuN ©   (26.11.04 15:16) [27]
> Потом просмотрев
> лог и узнав где именновылетает ошибка

Выделенное можно прокомментировать? Как это сделать? Как узнать "где именно"?


ShotGuN   (2004-11-26 15:16:00) [2]

В закладке Additional палитры компонент Дельфы есть такая штука под названием ApplicationEvents. У этой штучки есть событие OnException. Отсюда можно вести лог. Потом просмотрев лог и узнав где именно вылетает ошибка можно проанализировать почему. Вот... А если не использовать в этом событии   try finally except  raise, то вообще никакие ошибки не будут вылетать, даже если они на самом деле будут :). И все будут счастливы.. может быть :)


KSergey   (2004-11-26 11:46:00) [3]

> mid   (25.11.04 17:45) [25]
> хотя нормальный пакет JclDebug который бы компилился я пока
> не нашел

Странно... Простой поиск по этой конфе ;)

http://delphimaster.ru/cgi-bin/forum.pl?id=1100789422&n=0
http://www.delphi-jedi.org


mid   (2004-11-25 17:45:00) [4]

To KSergey ©

По поводу второй части полностью согласен, да и первой тоже,

ну в общем то вопрос и был в том как с минимальными затрвтами найти именно то место где это происходит, одно из решений было
предложено TUser ©   (24.11.04 15:06) [9] за что ему спасибо, хотя нормальный пакет JclDebug который бы компилился я пока не нашел


KSergey   (2004-11-25 17:28:00) [5]

>  [22] mid   (25.11.04 17:19)

Тогда средство одно: искать ошибки в алгоритме... Возможно, в какой-то момент подсовываются не те параметры.
В общем же лучае не исключены ошибки и внутри dll - от чего бы и нет?

> [19] wal ©   (24.11.04 16:42)
> Красиво пишет Error в заголовке

Думаю из-за того, что обе на дельфи, объекты исключений совместимые, если так можно выразиться. Ну и кроме того ошибка в библиотеке такая, что не приводит к разрушению программы...


Anatoly Podgoretsky   (2004-11-25 17:23:00) [6]

Абсолютно точно и отсюда исправлять ошибки в программе, что бы во внешние функции не поступали недостоверные данные.


mid   (2004-11-25 17:19:00) [7]

Ничего не имею против, но повторяю что Try except не на все случаи жизни иногда он не спасает, бывает так что при вызове какой то из функций из какой то библиотеки приводит к тому что программа завершается аварийно и до вашего внешнего except она никогда не дойдет


wal   (2004-11-24 16:47:00) [8]

>Anatoly Podgoretsky ©   (24.11.04 16:45) [20]
Ничего не имею против, результат от этого не измениться.


Anatoly Podgoretsky   (2004-11-24 16:45:00) [9]

wal ©   (24.11.04 16:42) [19]
function AV(P: Pointer):Byte;stdcall;
begin
  Result := p^
end;

IntToStr(AV(nil))


wal   (2004-11-24 16:42:00) [10]

>mid   (24.11.04 16:26) [17]
Библиотека lib.dpr

library lib;
uses
 SysUtils,
 Classes;

{$R *.res}
function AV:Byte;stdcall;
var p: PByte;
begin
 p:= nil;
 Result := p^
end;

exports AV;

begin
end.

Программа, модуль с формой и кнопкой:

...
function AV:byte;stdcall;external 'lib.dll';
...
procedure TForm1.Button1Click(Sender: TObject);
begin
try
  Caption := IntToStr(AV)
except
  Caption := 'Error'
end;
end;

Красиво пишет Error в заголовке, а Вы чего ожидали?


Anatoly Podgoretsky   (2004-11-24 16:37:00) [11]

try
  func(nil);
except
  ...
end;


mid   (2004-11-24 16:26:00) [12]

ТО wal ©  

Предлагаю еще раз написать библиотеку пусть с одной ф-ией, в ф-ии намеренно сделать Access Violation и пытаться это обрабатывать, можете поделиться впечатлениями


Anatoly Podgoretsky   (2004-11-24 16:26:00) [13]

wal ©   (24.11.04 16:17) [15]
И это тоже, но как правило передаются неверные данные в функцию.


wal   (2004-11-24 16:17:00) [14]

Естественно твоя, если ты вызываешь функцию, которая может привести к исключению, а ты его не обрабатываешь.

С уважением.


Anatoly Podgoretsky   (2004-11-24 16:15:00) [15]

Да если ты в нее передашь неверный адрес, так и будет Access violation и сообщение об ошибке в той функции.


mid   (2004-11-24 16:11:00) [16]

>Да но ошибка не там, а в твоем коде  

A если, например, я вызываю какую-то ф-ию из какой-то библиотеки,например MsXml.dll, и она вместо нужного результата приводит к Access violation это по вашему чья ошибка?


Anatoly Podgoretsky   (2004-11-24 15:57:00) [17]

Да но ошибка не там, а в твоем коде и тебе предстоит веселое занятие.


mid   (2004-11-24 15:29:00) [18]

>тебя ж никто туда не посылает ...

Почему такая уверенность, сделайте map файл и посмотрите сколько всего там используется кроме написаного вами кода, хотя бы так


Digitman   (2004-11-24 15:14:00) [19]


> предлагаю попробовать перейти по адрессу 00000000


а ты не ходи по этому адресу.
тебя ж никто туда не посылает ...

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


TUser   (2004-11-24 15:06:00) [20]

Тут недавно обсуждался JclDebug.pas. Что это такое - не знаю, я его ни разу не использовал. Но может поможет?


Страницы:   1 2

Наверх

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