Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Access Violation


Автор: Leana 30.3.2007, 14:35
Ребята, помогите. Мне надо отловить bug...

Воспроизвести проблему не могу сама, но клиент это может время от времени... По call stack могу определить, что проблема возникает в определенной процедуре. Изучила процедуру. Нашла один объект, который создается и потом не уничтожается...

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

Вопрос второй: если это служит причиной AV, может ли это также вызывать странное поведение у программы. Например, в моем случае, каждый раз, когда возникает AV, программа повторяет без всякой причины несколько процедур, которые были уже выполнены до этого. Например, при транзакции мы создали 3 записи... Потом перешли к процедуре внутри которой возникает AV, и потом почему то выполняются опять процедуры, которые создали 3 записи, и потом мы идем в Exception, где оно обрабатывается. 

Please help!!!!

Автор: Snowy 30.3.2007, 14:53
Защищай код try..except/finally.
Без этого вообще серъёзный код не пишется.

Автор: Leana 30.3.2007, 14:55
try... except/finally в коде используется... 

Автор: Snowy 30.3.2007, 14:59
Значит AV не там ;-)

Автор: Leana 30.3.2007, 15:17
AV там... и она обрабатывается в except блоке. 
В except блоке мы даем команду записать call stack в лог-файл. И из call стэка я могу понять, что произошла AV.
---------------------------17/03/07 09:48:18---------------------------
Exception 'EAccessViolation' in module Galaxy.exe at 000C3631
Access violation at address 004C4631 in module 'Galaxy.exe'. Read of address 000002F4

Module: Forms, Source: UNKNOWN, Line UNKNOWN
Procedure: Forms.TCustomForm.Close

Call stack:
:004C4631 [Galaxy.exe] Forms.TCustomForm.Close
:00EFB754 [Galaxy.exe] print_starting_here (tktdrv.pas, line 2652)
:00405A40 [Galaxy.exe] System.__linkproc__ HandleFinally
:7C9037BF [ntdll.dll]
:7C90378B [ntdll.dll]
:00EFB75F [Galaxy.exe] print_starting_here (tktdrv.pas, line 2653)
:7C937B48 [ntdll.dll]
:00EFB75F [Galaxy.exe] print_starting_here (tktdrv.pas, line 2653)
:7C9105C8 [ntdll.dll]
:7C910551 [ntdll.dll]
:7C91056D [ntdll.dll]
:7C9131DC [ntdll.dll]
:7C913212 [ntdll.dll]

и так далее

print_starting_here - это именно та процедура, в которой создается объект, но потом не уничтожается.

Опять же вопрос: может ли это служить причиной AV? 

Так как я не могу воспроизвести проблему, мне трудно сказать, что добавление FreeAndNil(MyObject) в блоке finally, устранит AV.


Автор: Snowy 30.3.2007, 15:23
Нет. Это никак не может быть причиной AV.
В чём причина - без кода сказать сложно.
Покажи код - посмотрим.

Автор: Leana 30.3.2007, 15:31
к сожалению, код показать не могу.

во-первых, company privacy issues.
Во-вторых, там процедуры в 2500 строк - черт ногу сломит.

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

Во всяком случае, вы мне сказали, что не уничтожение объекта не может служить причиной AV.  Жаль... я думала, я была на верном пути :(



Автор: MetalFan 30.3.2007, 16:09
ну тогда удачно поймать глюк)

Автор: Snowy 30.3.2007, 17:36
Не стоит делать такие процедуры.
Такой объём кода всегда нужно дробить на отдельные части.
Иначе чревато вот такими сложностями с локализацией глюков.
Да и читать такой код проблемно, не говоря уже о том, чтобы с ним работать.

Автор: Sunvas 30.3.2007, 17:44
А пошаговым выполнением определить что, не удается?

Автор: Leana 30.3.2007, 19:02
да, ребята, понимаю. Такие процедуры писать нельзя... Их написал кто-то очень умный несколько лет назад. Конечно, он здесь уже не работает... А мы жучков отлавливаем. :(

Пошагово отловить не могу, потому что у меня AV не возникает. 
Скорей всего буду делать logging version. И потом по более детальной информации пытаться определить, в чем проблема.

Автор: dumb 31.3.2007, 02:08
есть подозрение, что в print_starting_here (tktdrv.pas, line 2652) производится попытка закрыть уже уничтоженную форму.

Автор: dumb 31.3.2007, 02:28
чуть конкретнее можно сказать, если хотя бы Galaxy.exe куда-нибудь выложишь.

Автор: Hidrag 15.5.2008, 19:39
Ставил сегодня Delphi 2006, затем снес поставил Delphi 7 и снова эта ошибка! При открытие любого проекта и запуска его на выполнение вылазит эта ошибка!

Создаю свой проект, очень простой, форма и несколько кнопок, нажимаю run, запускается приложение и тут же падает эта ошибка :( ЧТо может быть?

У пользователя на компе права админские, хоть и не под админом сижу, может быть системе не дает делфи куда то в память лезти?

Автор: THandle 15.5.2008, 19:57
Hidrag, такое?

http://forum.vingrad.ru/forum/topic-201047.html

Я с этим и по сей день мучаюсь, решения найти не могу...

Автор: Qu1nt 15.5.2008, 20:13
Создайте пустое приложение. Если будет грузить библиотеку wininet.dll (например, "при попадании" курсора на форму), значит - троян. Помню, что один из симптомов: скрытая dll`ка в папке с программой (приблизительно: wsock.dll). Естественно удаляем, и не забываем включить антивирус. 

Автор: Hidrag 15.5.2008, 21:18
THandle, да да, оно самое!
И не только делфи, визуал с++ 2005 тоже самое мне выдает, после чего открывается какое окно типа дебагера низкоуровневого... жуть...
получается: пишу код, делаю ему буилт,  после чего запускаю экзешник уже в папке проекта, а через ИДЕ этот глюх...

Автор: THandle 15.5.2008, 21:32
Цитата(Qu1nt @  15.5.2008,  21:13 Найти цитируемый пост)
Создайте пустое приложение. Если будет грузить библиотеку wininet.dll (например, "при попадании" курсора на форму), значит - троян. Помню, что один из симптомов: скрытая dll`ка в папке с программой (приблизительно: wsock.dll). Естественно удаляем, и не забываем включить антивирус.  

Именно оно. Есть такое. Сейчас будем чистить. +1

Автор: Hidrag 15.5.2008, 22:44
А что значит пустое приложение?
Я создал новый проект, просто форма, компилирую, запускаю - навожу на форму мышку - ошибка!!!
Сделал показывать скрытые и даже системные файлы, в каталоге с проектом ничего лишнего нет :(

Автор: Qu1nt 15.5.2008, 23:21
Это именно эта дрянь, просто другая разновидность. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)